{"id":15755049,"url":"https://github.com/sweetchuck/robo-composer","last_synced_at":"2025-03-13T16:31:55.258Z","repository":{"id":26787465,"uuid":"110282091","full_name":"Sweetchuck/robo-composer","owner":"Sweetchuck","description":"Robo task wrapper for Composer commands","archived":false,"fork":false,"pushed_at":"2024-12-17T23:51:05.000Z","size":304,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"4.x","last_synced_at":"2025-03-10T14:55:17.117Z","etag":null,"topics":["composer","robo-tasks"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Sweetchuck.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}},"created_at":"2017-11-10T18:57:04.000Z","updated_at":"2024-12-17T18:06:01.000Z","dependencies_parsed_at":"2023-01-14T05:17:44.597Z","dependency_job_id":"fcbc62e0-64c8-4940-bcdc-36540466a70b","html_url":"https://github.com/Sweetchuck/robo-composer","commit_stats":{"total_commits":24,"total_committers":2,"mean_commits":12.0,"dds":0.04166666666666663,"last_synced_commit":"c3614a986c2e9426b393525fe410020f2854c3d0"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sweetchuck%2Frobo-composer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sweetchuck%2Frobo-composer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sweetchuck%2Frobo-composer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sweetchuck%2Frobo-composer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sweetchuck","download_url":"https://codeload.github.com/Sweetchuck/robo-composer/tar.gz/refs/heads/4.x","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243441445,"owners_count":20291472,"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":["composer","robo-tasks"],"created_at":"2024-10-04T08:06:45.671Z","updated_at":"2025-03-13T16:31:50.244Z","avatar_url":"https://github.com/Sweetchuck.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# Robo task wrapper for Composer\n\n[![CircleCI](https://circleci.com/gh/Sweetchuck/robo-composer/tree/3.x.svg?style=svg)](https://circleci.com/gh/Sweetchuck/robo-composer/?branch=3.x)\n[![codecov](https://codecov.io/gh/Sweetchuck/robo-composer/branch/3.x/graph/badge.svg?token=859DBVngn4)](https://codecov.io/gh/Sweetchuck/robo-composer/tree/3.x)\n\n@todo\n\n\n## Install\n\nRun `composer require --dev sweetchuck/robo-composer`\n\n\n## Task - taskComposerLockDiffer\n\n```php\n\u003c?php\n\ndeclare(strict_types = 1);\n\nclass RoboFileExample extends \\Robo\\Tasks\n{\n    use \\Sweetchuck\\Robo\\Composer\\ComposerTaskLoader;\n\n    /**\n     * @hook validate @validateArgumentFileName\n     */\n    public function validateArgumentFileName(\\Consolidation\\AnnotatedCommand\\CommandData $commandData)\n    {\n        $argNames = $commandData-\u003eannotationData()-\u003egetList(__FUNCTION__);\n        $input = $commandData-\u003einput();\n        foreach ($argNames as $argName) {\n            assert($input-\u003ehasArgument($argName), 'invalid argument name');\n            $input-\u003esetArgument(\n                $argName,\n                $this-\u003eprocessFileName($input-\u003egetArgument($argName)),\n            );\n        }\n    }\n\n    /**\n     * @command composer:lock-diff\n     *\n     * @validateArgumentFileName fileA,fileB\n     */\n    public function composerLockDiff(string $fileA, string $fileB)\n    {\n        $a = json_decode(file_get_contents($fileA), true);\n        $b = json_decode(file_get_contents($fileB), true);\n\n        return $this\n            -\u003ecollectionBuilder()\n            -\u003eaddTask(\n                $this\n                    -\u003etaskComposerLockDiffer()\n                    -\u003esetLockA($a)\n                    -\u003esetLockB($b)\n            )\n            -\u003eaddCode(function (\\Robo\\State\\Data $data): int {\n                $this\n                    -\u003eoutput()\n                    -\u003ewriteln(\\Symfony\\Component\\Yaml\\Yaml::dump($data['composer.lockDiff']));\n\n                return 0;\n            });\n    }\n\n    protected function processFileName(string $fileName): string\n    {\n        return preg_replace('@^/proc/self/fd/(\\d+)$@', 'php://fd/$1', $fileName);\n    }\n}\n```\n\nRun: `vendor/bin/robo composer:lock-diff \u003c(git show 'HEAD^:composer.lock') ./composer.lock`\u003cbr /\u003e\nExample output:\n\u003e \u003cpre\u003esymfony/filesystem:\n\u003e     name: symfony/filesystem\n\u003e     version_old: v4.4.5\n\u003e     version_new: v4.4.18\n\u003e     required_as: null\n\u003e symfony/finder:\n\u003e     name: symfony/finder\n\u003e     version_old: v4.4.5\n\u003e     version_new: v5.2.1\n\u003e     required_as: null\u003c/pre\u003e\n\n\n## Task - taskComposerPackagePaths\n\n```php\n\u003c?php\n\ndeclare(strict_types = 1);\n\nclass RoboFileExample extends \\Robo\\Tasks\n{\n    use \\Sweetchuck\\Robo\\Composer\\ComposerTaskLoader;\n\n    /**\n     * @command composer:package-paths\n     */\n    public function composerPackagePaths()\n    {\n        return $this\n            -\u003ecollectionBuilder()\n            -\u003eaddTask($this-\u003etaskComposerPackagePaths())\n            -\u003eaddCode(function (\\Robo\\State\\Data $data): int {\n                $output = $this-\u003eoutput();\n                foreach ($data['composer.packagePaths'] as $name =\u003e $path) {\n                    $output-\u003ewriteln(\"$name =\u003e $path\");\n                }\n\n                return 0;\n            });\n    }\n}\n\n```\n\nRun: `vendor/bin/robo composer:package-paths`\u003cbr /\u003e\nExample output:\n\u003e \u003cpre\u003esymfony/filesystem =\u003e /my_project_01/vendor/symfony/filesystem\n\u003e symfony/finder =\u003e /my_project_01/vendor/symfony/finder\u003c/pre\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsweetchuck%2Frobo-composer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsweetchuck%2Frobo-composer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsweetchuck%2Frobo-composer/lists"}