{"id":31934781,"url":"https://github.com/launchrctl/compose","last_synced_at":"2025-10-30T04:36:59.936Z","repository":{"id":171399574,"uuid":"641356859","full_name":"launchrctl/compose","owner":"launchrctl","description":"Compose is a launchr plugin and a recursive dependency fetcher and filesystem composer for plasma-compose.yaml projects.","archived":false,"fork":false,"pushed_at":"2025-07-23T09:39:17.000Z","size":173,"stargazers_count":4,"open_issues_count":3,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-07-23T11:34:26.123Z","etag":null,"topics":["cli","composition","launchr","launchrctl","plugin"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/launchrctl.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,"zenodo":null}},"created_at":"2023-05-16T09:54:48.000Z","updated_at":"2025-07-23T09:39:21.000Z","dependencies_parsed_at":null,"dependency_job_id":"e0c63f45-34a5-462a-a0d5-ffaec43bb74f","html_url":"https://github.com/launchrctl/compose","commit_stats":null,"previous_names":["launchrctl/compose"],"tags_count":33,"template":false,"template_full_name":null,"purl":"pkg:github/launchrctl/compose","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchrctl%2Fcompose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchrctl%2Fcompose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchrctl%2Fcompose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchrctl%2Fcompose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/launchrctl","download_url":"https://codeload.github.com/launchrctl/compose/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/launchrctl%2Fcompose/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279018138,"owners_count":26086285,"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","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cli","composition","launchr","launchrctl","plugin"],"created_at":"2025-10-14T06:53:48.992Z","updated_at":"2025-10-14T06:53:52.831Z","avatar_url":"https://github.com/launchrctl.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Composition Tool Specification\n\nThe composition tool is a command-line tool that helps developers manage\ndependencies for their projects. It allows developers to specify the dependencies for\na project in a \"plasma-compose.yaml\" file, and then fetches and installs those dependencies\nin a structured and organized way.\n\nThe tool works by recursively fetching and processing the \"plasma-compose.yaml\" files for each package\nand its dependencies, and then merging the resulting filesystems into a single filesystem.\n\n### CLI\n\nThe composition tool is invoked from the command line with the following syntax:\nlaunchr compose [options]\nWhere options are:\n\n* -w, --working-dir : The directory where temporary files should be stored during the\n  composition process. Default is the .compose/packages\n* -s, --skip-not-versioned : Skip not versioned files from source directory (git only)\n* --conflicts-verbosity: Log files conflicts in format \"[current-package] - path to file \u003e Selected\n  from [domain, other package or current-package]\"\n* --interactive: Interactive mode allows to submit user credentials during action (default: true)\n\nExample usage - `launchr compose -w=./folder/something -s=1 or -s=true --conflicts-verbosity`\n\nIt's important to note that: if same file is present locally and also brought by a package, default strategy is that\nlocal file will be taken and package file\nignored. [Different strategies](https://github.com/launchrctl/compose/blob/main/example/compose.example.yaml#L18-L35)\ncan be difined to customize this behavior to your needs.\n\n### `plasma-compose.yaml` File Format\n\nThe \"plasma-compose.yaml\" file is a text file that specifies the dependencies for a package, along with any necessary\nmetadata and sources for those dependencies.\nThe file format includes the following elements:\n\n- name: The name of the package.\n- version: The version number of the package.\n- source: The source for the package, including the type of source (Git, HTTP), URL or file path, merge strategy and\n  other metadata.\n- dependencies: A list of required dependencies.\n\nList of strategies:\n\n- overwrite-local-file\n- remove-extra-local-files\n- ignore-extra-package-files\n- filter-package-files\n\nExample:\n\n```yaml\nname: example\ndependencies:\n  - name: compose-example\n    source:\n      type: git\n      ref: master # branch or tag name\n      url: https://github.com/example/compose-example.git\n      strategy:\n        - name: remove-extra-local-files\n          path:\n            - path/to/remove-extra-local-files\n        - name: ignore-extra-package-files\n          path:\n            - library/inventories/platform_nodes/configuration/dev.yaml\n            - library/inventories/platform_nodes/configuration/prod.yaml\n            - library/inventories/platform_nodes/configuration/whatever.yaml\n```\n\n### Fetching and Installing Dependencies\n\nThe composition tool fetches and installs dependencies for a package by recursively processing the \"plasma-compose.yaml\"\nfiles for each package and its dependencies. The tool follows these general steps:\n\n1. Check if package exists locally and is up-to-date. If it's not, remove it from packages dir and proceed to next step.\n2. Fetch the package from the specified location.\n3. Extract the package contents to a packages directory.\n4. Process the \"plasma-compose.yaml\" file for the package, fetching and installing any necessary dependencies\n   recursively.\n5. Merge the package filesystem into the final platform filesystem.\n6. Repeat steps 1-5 for each package and its dependencies.\n\nDuring this process, the composition tool keeps track of the dependencies for each package.\n\n### Plasma-compose commands\n\nit's possible to manipulate plasma-compose.yaml file using commands:\n\n- plasmactl compose:add\n- plasmactl compose:update\n- plasmactl compose:delete\n\nFor `compose:add` and `compose:update` there are 2 ways to submit data. With or without flags.\nPassing `--package` and `--url` to add command will automatically update plasma-compose file.\nFor update command only `--package` required to update from CLI.\n\nFor `compose:delete` it's possible to pass list of packaged to delete.\n\nIn other cases, user will be prompted to CLI form to fill necessary data of packages.\n\nExamples of usage\n\n```\nlaunchr compose:add --url some-url --type http\nlaunchr compose:add --package package-name --url some-url --ref v1.0.0\nlaunchr compose:update --package package-name --url some-url --ref v1.0.0\n\nlaunchr compose:add --package package-name --url some-url --ref v1.0.0 --strategy overwrite-local-file --strategy-path \"path1|path2\"\nlaunchr compose:add --package package-name --url some-url --ref branch --strategy overwrite-local-file,remove-extra-local-files --strategy-path \"path1|path2,path3|path4\"\nlaunchr compose:add --package package-name --url some-url --ref v1.0.0 --strategy overwrite-local-file --strategy-path \"path1|path2\" --strategy remove-extra-local-files --strategy-path \"path3|path4\"\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaunchrctl%2Fcompose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flaunchrctl%2Fcompose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaunchrctl%2Fcompose/lists"}