{"id":15174070,"url":"https://github.com/amethyst-php/action","last_synced_at":"2026-01-26T19:39:19.979Z","repository":{"id":56946856,"uuid":"204762423","full_name":"amethyst-php/action","owner":"amethyst-php","description":null,"archived":false,"fork":false,"pushed_at":"2024-04-04T18:13:33.000Z","size":239,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-04T21:44:29.253Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","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/amethyst-php.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-08-27T18:11:48.000Z","updated_at":"2024-03-28T17:16:49.000Z","dependencies_parsed_at":"2024-11-08T08:54:55.441Z","dependency_job_id":"baf6720d-843b-4c2e-8cbd-9f0aae8d9165","html_url":"https://github.com/amethyst-php/action","commit_stats":{"total_commits":61,"total_committers":2,"mean_commits":30.5,"dds":0.09836065573770492,"last_synced_commit":"c9521d63e243c67afa29890d196119d758c9320e"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/amethyst-php/action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amethyst-php%2Faction","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amethyst-php%2Faction/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amethyst-php%2Faction/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amethyst-php%2Faction/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amethyst-php","download_url":"https://codeload.github.com/amethyst-php/action/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amethyst-php%2Faction/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28786038,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T13:55:28.044Z","status":"ssl_error","status_checked_at":"2026-01-26T13:55:26.068Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-09-27T11:23:51.560Z","updated_at":"2026-01-26T19:39:19.938Z","avatar_url":"https://github.com/amethyst-php.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# amethyst-action\n\n[![Action Status](https://github.com/amethyst-php/action/workflows/test/badge.svg)](https://github.com/amethyst-php/action/actions)\n\n[Amethyst](https://github.com/amethyst-php/amethyst) package.\n\n# Requirements\n\nPHP 7.1 and later.\n\n## Installation\n\nYou can install it via [Composer](https://getcomposer.org/) by typing the following command:\n\n```bash\ncomposer require amethyst/action\n```\n\nThe package will automatically register itself.\n\n## Documentation\n\n[Read](docs/index.md)\n\n## Testing\n\nConfigure the .env file before launching `./vendor/bin/phpunit`\n\n\n## Dummy\n\nLet's create a simple workflow, the goal is to log the message of an event when is fired.\n\n`app/Events/DummyEvent.php`\n```php\n\u003c?php\n\nnamespace App\\Events;\n\n\nclass DummyEvent\n{\n    public $message;\n\n    public function __construct(string $message)\n    {\n        $this-\u003emessage = $message;\n    }\n\n    public function getData()\n    {\n        return [\n            'message' =\u003e $this-\u003emessage\n        ];\n    }\n}\n```\n\n`app/Actions/LogAction.php`\n```php\n\u003c?php\n\nnamespace App\\Actions;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Amethyst\\Actions\\Action;\nuse Railken\\Bag;\n\nclass LogAction extends Action\n{\n    public function requires()\n    {\n        return [\n            'message' =\u003e 'text'\n        ];\n    }\n\n    public function dispatch(Closure $next, Bag $data) \n    {\n        Log::info($data-\u003emessage);\n\n        $next($data);\n    }\n}\n```\n\n`app/Actions/EventListenerAction.php`\n```php\n\u003c?php\n\nnamespace App\\Actions;\n\nuse Illuminate\\Support\\Facades\\Log;\nuse Amethyst\\Actions\\Action;\nuse Illuminate\\Support\\Facades\\Event;\nuse Railken\\Bag;\n\nclass EventListenerAction extends Action\n{\n    protected $event;\n\n    public function dispatch(Closure $next, Bag $data) \n    {\n        Event::listen([$this-\u003edata-\u003eevent], function ($event_name, $events) use ($next, $data) {\n            $next($data-\u003emerge(new Bag($events[0]-\u003egetData())));\n        });\n    }\n}\n```\n\nNow remains only data entry\n```php\n\nuse Amethyst\\Managers\\ActionManager;\nuse Amethyst\\Managers\\WorkflowManager;\nuse Amethyst\\Managers\\WorkflowNode;\nuse Amethyst\\Managers\\AggregatorManager;\nuse App\\Actions\\LogAction;\nuse App\\Actions\\EventListenerAction;\nuse App\\Events\\DummyEvent;\nuse Symfony\\Component\\Yaml\\Yaml;\n\napp('amethyst.workflow')-\u003eaddType('log', LogAction::class);\napp('amethyst.workflow')-\u003eaddType('event-listener', EventListenerAction::class);\n\n$actionManager = new ActionManager();\n\n$logAction = $actionManager-\u003ecreateOrFail([\n    'name' =\u003e 'Log',\n    'payload' =\u003e Yaml::dump([\n        'class' =\u003e 'log',\n        'arguments' =\u003e []\n    ])\n])-\u003egetResource();\n\n$eventListenerAction = $actionManager-\u003ecreateOrFail([\n    'name' =\u003e 'Event Listener',\n    'payload' =\u003e Yaml::dump([\n        'class' =\u003e 'event-listener',\n        'arguments' =\u003e []\n    ])\n])-\u003egetResource();\n\n\n$workflowManager = new WorkflowManager();\n$aggregatorManager = new AggregatorManager();\n\n$workflow = $workflowManager-\u003ecreateOrFail([\n    'name' =\u003e 'Log events'\n])-\u003egetResource();\n\n\n$node1 = $workflowNodeManager-\u003ecreateOrFail([\n    'workflow_id' =\u003e $workflow-\u003eid,\n    'target_type' =\u003e 'action',\n    'target_id' =\u003e $eventListeneAction-\u003eid,\n    'data' =\u003e Yaml::dump([\n        'event' =\u003e DummyEvent::class\n    ]),\n])-\u003egetResource();\n\n$node2 = $workflowNodeManager-\u003ecreateOrFail([\n    'workflow_id' =\u003e $workflow-\u003eid,\n    'target_type' =\u003e 'action',\n    'target_id' =\u003e $logAction-\u003eid\n])-\u003egetResource();\n\n$aggregatorManager-\u003ecreateOrFail([\n    'source_type' =\u003e 'workflow-node',\n    'source_id' =\u003e $node1-\u003eid,\n    'aggregate_type' =\u003e 'workflow-node',\n    'aggregate_type' =\u003e $node2-\u003eid\n]);\n\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famethyst-php%2Faction","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famethyst-php%2Faction","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famethyst-php%2Faction/lists"}