{"id":28924078,"url":"https://github.com/stenstromen/crabflow","last_synced_at":"2025-06-29T17:37:22.180Z","repository":{"id":292828459,"uuid":"981803622","full_name":"Stenstromen/crabflow","owner":"Stenstromen","description":"Crabflow is a powerful tool for running REST workflows","archived":false,"fork":false,"pushed_at":"2025-06-19T11:03:48.000Z","size":139,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-19T12:19:35.100Z","etag":null,"topics":["automation","http-client","rest-api","rust","workflow-automation","yaml"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Stenstromen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-11T22:57:50.000Z","updated_at":"2025-06-19T11:03:34.000Z","dependencies_parsed_at":"2025-05-12T11:39:50.369Z","dependency_job_id":"b114a042-120a-4f6b-80c4-df286503f041","html_url":"https://github.com/Stenstromen/crabflow","commit_stats":null,"previous_names":["stenstromen/crabflow"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/Stenstromen/crabflow","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stenstromen%2Fcrabflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stenstromen%2Fcrabflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stenstromen%2Fcrabflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stenstromen%2Fcrabflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Stenstromen","download_url":"https://codeload.github.com/Stenstromen/crabflow/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Stenstromen%2Fcrabflow/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261273866,"owners_count":23133830,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","http-client","rest-api","rust","workflow-automation","yaml"],"created_at":"2025-06-22T10:03:49.170Z","updated_at":"2025-06-29T17:37:22.164Z","avatar_url":"https://github.com/Stenstromen.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Crabflow 🦀\n\nCrabflow is a powerful tool for running REST workflows. It allows you to define and execute sequences of HTTP requests with dependencies, retries, and response validation.\n\n- [Crabflow 🦀](#crabflow-)\n  - [Features ✨](#features-)\n  - [Installation 📥](#installation-)\n    - [Homebrew (MacOS/Linux (x86\\_64) - x86\\_64/arm64)](#homebrew-macoslinux-x86_64---x86_64arm64)\n    - [Podman (Linux x86\\_64)](#podman-linux-x86_64)\n    - [Download and Run Binary](#download-and-run-binary)\n    - [Build and Run Binary](#build-and-run-binary)\n  - [Usage 🚀](#usage-)\n  - [Workflow Configuration ⚙️](#workflow-configuration-️)\n    - [Task Configuration](#task-configuration)\n    - [Response Expectations](#response-expectations)\n    - [Environment Variables](#environment-variables)\n  - [License](#license)\n\n## Features ✨\n\n- 📝 Define workflows in YAML format\n- 🌐 Execute HTTP requests with various methods (GET, POST, etc.)\n- 📦 Support for different body types (JSON, form-urlencoded, raw, multipart)\n- ✅ Response validation using status codes, JSON paths, and raw text matching\n- 🔧 Environment variable resolution\n- 🔄 Response registration and reference between tasks\n- 🔁 Automatic retries with configurable delay\n- 🔐 Basic authentication support\n- 🎯 Custom headers support\n\n## Installation 📥\n\n### Homebrew (MacOS/Linux (x86_64) - x86_64/arm64)\n\n```bash\nbrew install stenstromen/tap/crabflow\n```\n\n### Podman (Linux x86_64)\n\n```bash\npodman run --rm \n-e PASSWD=123 \\\n-e X_API_KEY=123 \\\n-e FOO=bar \\\n-v /path/to/workflow.yaml:/data/workflow.yaml:ro \\\nghcr.io/stenstromen/crabflow:latest /crabflow /data/workflow.yaml\n```\n\n### Download and Run Binary\n\n- For **MacOS** and **Linux**: Checkout and download the latest binary from [Releases page](https://github.com/Stenstromen/crabflow/releases/latest/)\n- For **Windows**: Build the binary yourself.\n\n### Build and Run Binary\n\n```bash\ncargo build --release\n./target/release/crabflow\n```\n\n## Usage 🚀\n\nCreate a workflow file (e.g., `workflow.yaml`) and run it:\n\n```bash\ncrabflow workflow.yaml\n```\n\nIf no workflow file is specified, Crabflow will look for `workflow.yaml` in the current directory.\n\n## Workflow Configuration ⚙️\n\nHere's an example workflow configuration:\n\n```yaml\nname: example-pipeline\ntasks:\n  - name: fetch-users\n    type: http\n    method: GET\n    url: http://api.example.com/users\n    retries: 2\n    expect:\n      type: JsonPath\n      path: data.users\n      value: \"[]\"\n\n  - name: create-user\n    type: http\n    method: POST\n    url: http://api.example.com/users\n    depends_on: [fetch-users]\n    body_type: json\n    body:\n      name: \"John Doe\"\n      email: \"john@example.com\"\n    expect:\n      - type: Status\n        code: 201\n      - type: JsonPath\n        path: \"id\"\n        value: \"123\"\n    register: new_user\n\n  - name: verify-user\n    type: http\n    method: GET\n    url: http://api.example.com/users/{{new_user.json.id}}\n    depends_on: [create-user]\n    expect:\n      - type: Status\n        code: 200\n      - type: JsonPath\n        path: \"name\"\n        value: \"John Doe\"\n\n  - name: display-user\n    type: display\n    variables:\n      - new_user\n```\n\n### Task Configuration\n\nEach task in the workflow can have the following properties:\n\n- `name`: Unique identifier for the task\n- `type`: Type of task (currently only \"http\" is supported)\n- `method`: HTTP method (GET, POST, PUT, DELETE, etc.)\n- `url`: Target URL\n- `headers`: Custom HTTP headers\n- `body`: Request body (optional)\n- `body_type`: Type of body (json, form-urlencoded, raw, form-multipart)\n- `depends_on`: List of task names that must complete before this task\n- `retries`: Number of retry attempts (default: 1)\n- `retry_delay`: Delay between retries in seconds (default: 5)\n- `expect`: List of expectations for the response\n- `register`: Name to register the response for reference in other tasks\n- `auth`: Basic authentication credentials\n\n### Response Expectations\n\nYou can validate responses using:\n\n- `Status`: Expected HTTP status code\n- `JsonPath`: Expected value at a JSON path\n- `Raw`: Expected text in the response\n\n### Environment Variables\n\nUse environment variables in your workflow:\n\n```yaml\nurl: http://api.example.com/{{env.API_VERSION}}/users\nheaders:\n  Authorization: \"Bearer {{env.API_KEY}}\"\n```\n\n## License\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstenstromen%2Fcrabflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstenstromen%2Fcrabflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstenstromen%2Fcrabflow/lists"}