The composition tool is a command-line tool that helps developers manage dependencies for their projects. It allows developers to specify the dependencies for a project in a "plasma-compose.yaml" file, and then fetches and installs those dependencies in a structured and organized way.
The tool works by recursively fetching and processing the "plasma-compose.yaml" files for each package and its dependencies, and then merging the resulting filesystems into a single filesystem.
The composition tool is invoked from the command line with the following syntax: launchr compose [options] Where options are:
- -w, --working-dir : The directory where temporary files should be stored during the composition process. Default is the .compose/packages
- -s, --skip-not-versioned : Skip not versioned files from source directory (git only)
- --conflicts-verbosity: Log files conflicts in format "[current-package] - path to file > Selected from [domain, other package or current-package]"
- --interactive: Interactive mode allows to submit user credentials during action (default: true)
Example usage - launchr compose -w=./folder/something -s=1 or -s=true --conflicts-verbosity
It's important to note that: if same file is present locally and also brought by a package, default strategy is that local file will be taken and package file ignored. Different strategies can be difined to customize this behavior to your needs.
The "plasma-compose.yaml" file is a text file that specifies the dependencies for a package, along with any necessary metadata and sources for those dependencies. The file format includes the following elements:
- name: The name of the package.
- version: The version number of the package.
- source: The source for the package, including the type of source (Git, HTTP), URL or file path, merge strategy and other metadata.
- dependencies: A list of required dependencies.
List of strategies:
- overwrite-local-file
- remove-extra-local-files
- ignore-extra-package-files
- filter-package-files
Example:
name: example
dependencies:
- name: compose-example
source:
type: git
ref: master # branch or tag name
url: https://github.com/example/compose-example.git
strategy:
- name: remove-extra-local-files
path:
- path/to/remove-extra-local-files
- name: ignore-extra-package-files
path:
- library/inventories/platform_nodes/configuration/dev.yaml
- library/inventories/platform_nodes/configuration/prod.yaml
- library/inventories/platform_nodes/configuration/whatever.yaml
The composition tool fetches and installs dependencies for a package by recursively processing the "plasma-compose.yaml" files for each package and its dependencies. The tool follows these general steps:
- Check if package exists locally and is up-to-date. If it's not, remove it from packages dir and proceed to next step.
- Fetch the package from the specified location.
- Extract the package contents to a packages directory.
- Process the "plasma-compose.yaml" file for the package, fetching and installing any necessary dependencies recursively.
- Merge the package filesystem into the final platform filesystem.
- Repeat steps 1-5 for each package and its dependencies.
During this process, the composition tool keeps track of the dependencies for each package.
it's possible to manipulate plasma-compose.yaml file using commands:
- plasmactl compose:add
- plasmactl compose:update
- plasmactl compose:delete
For compose:add
and compose:update
there are 2 ways to submit data. With or without flags.
Passing --package
and --url
to add command will automatically update plasma-compose file.
For update command only --package
required to update from CLI.
For compose:delete
it's possible to pass list of packaged to delete.
In other cases, user will be prompted to CLI form to fill necessary data of packages.
Examples of usage
launchr compose:add --url some-url --type http
launchr compose:add --package package-name --url some-url --ref v1.0.0
launchr compose:update --package package-name --url some-url --ref v1.0.0
launchr compose:add --package package-name --url some-url --ref v1.0.0 --strategy overwrite-local-file --strategy-path "path1|path2"
launchr compose:add --package package-name --url some-url --ref branch --strategy overwrite-local-file,remove-extra-local-files --strategy-path "path1|path2,path3|path4"
launchr 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"