{"id":13529516,"url":"https://github.com/phishy/wflow","last_synced_at":"2025-07-09T06:06:23.837Z","repository":{"id":44091746,"uuid":"208506361","full_name":"phishy/wflow","owner":"phishy","description":"🐆 EXPERIMENTAL -- Runs GitHub Actions workflows locally (local) -- Don't run your YAML like a 🐪","archived":false,"fork":false,"pushed_at":"2023-01-26T15:59:21.000Z","size":4528,"stargazers_count":252,"open_issues_count":44,"forks_count":7,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-03T01:12:33.312Z","etag":null,"topics":["ci","continuous-deployment","continuous-integration","devops","docker","docker-container","github-actions","javascript","local-development","workflow","yaml"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phishy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-09-14T21:31:46.000Z","updated_at":"2024-12-04T07:50:42.000Z","dependencies_parsed_at":"2023-02-02T20:02:49.509Z","dependency_job_id":null,"html_url":"https://github.com/phishy/wflow","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phishy%2Fwflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phishy%2Fwflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phishy%2Fwflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phishy%2Fwflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phishy","download_url":"https://codeload.github.com/phishy/wflow/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248161274,"owners_count":21057555,"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":["ci","continuous-deployment","continuous-integration","devops","docker","docker-container","github-actions","javascript","local-development","workflow","yaml"],"created_at":"2024-08-01T07:00:37.004Z","updated_at":"2025-04-10T05:10:08.886Z","avatar_url":"https://github.com/phishy.png","language":"JavaScript","readme":"![](screenshot.png)\n\n[![Join the chat at https://gitter.im/wflow-local/community](https://badges.gitter.im/wflow-local/community.svg)](https://gitter.im/wflow-local/community?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n![Codecov](https://img.shields.io/codecov/c/github/phishy/wflow)\n\n## Requirements\n\n* Docker\n* Node.js\n\n## Install\n\n`npm install -g wflow`\n\n## Usage\n\n`wflow`\n\nRunning that should give you a preview of how it works, however likely you'll want to specify a workflow file, dude.\n\nPoint wflow at a valid YAML file. You may also specify an event (a GitHub webhook payload). If you do not provide an event, it attempts to read from .git.\n\n`wflow --file build.yml --event event.json`\n\n## How It Works\n\nGitHub Actions uses Azure Pipeline to spin up real VMs that you request with `runs-on`. As this is running locally, we are using docker-in-docker. We'll see how this goes.\n\nWhen you run the `wflow`, it spins up a lightweight API and UI server. It reads the workflow syntax, and runs docker containers performing the work. Sidecar syslogs are setup for each docker container in order to capture the logs and write them to your `workspace`. Each jobs gets its own workspace. Each step in a job operates on the same workspace.  While log files are written to disk, they are simultanously broadcast over WebSocker so that the UI can consume them. The UI needs some work.\n\n## Workflow Syntax\n\nhttps://help.github.com/en/articles/workflow-syntax-for-github-actions\n\n### Currently supported\n\n* `name`\n* `jobs`\n* `jobs.\u003cjob_id\u003e`\n* `jobs.\u003cjob_id\u003e.name`\n* `jobs.\u003cjob_id\u003e.needs`\n* `jobs.\u003cjob_id\u003e.runs-on` (ubuntu-latest only)\n* `jobs.\u003cjob_id\u003e.steps`\n\nCurrently, only Docker-based actions are supported. PRs welcome for JavaScript-based actions.\n\n### Not yet supported\n\n* `on`\n* `on.schedule`\n* `jobs.\u003cjod_id\u003e.timeout-minutes`\n* `jobs.\u003cjob_id\u003e.strategy`\n* `jobs.\u003cjob_id\u003e.container`\n* `jobs.\u003cjob_id\u003e.services`\n\n## Install for Development\n\nThe following installs dependencies in `node_modules` and links `wflow` to work globally.\n\n`./install.sh`\n","funding_links":[],"categories":["Community Resources","JavaScript"],"sub_categories":["GitHub Tools and Management"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphishy%2Fwflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphishy%2Fwflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphishy%2Fwflow/lists"}