# Contributing to podman-compose ## Adding new commands To add a command you need to add a function that is decorated with `@cmd_run` passing the compose instance, command name and description. the wrapped function should accept two arguments the compose instance and the command-specific arguments (resulted from python's `argparse` package) inside that command you can run PodMan like this `compose.podman.run(['inspect', 'something'])` and inside that function you can access `compose.pods` and `compose.containers` ...etc. Here is an example ``` @cmd_run(podman_compose, 'build', 'build images defined in the stack') def compose_build(compose, args): compose.podman.run(['build', 'something']) ``` ## Command arguments parsing Add a function that accept `parser` which is an instance from `argparse`. In side that function you can call `parser.add_argument()`. The function decorated with `@cmd_parse` accepting the compose instance, and command names (as a list or as a string). You can do this multiple times. Here is an example ``` @cmd_parse(podman_compose, 'build') def compose_build_parse(parser): parser.add_argument("--pull", help="attempt to pull a newer version of the image", action='store_true') parser.add_argument("--pull-always", help="attempt to pull a newer version of the image, Raise an error even if the image is present locally.", action='store_true') ``` NOTE: `@cmd_parse` should be after `@cmd_run` ## Calling a command from inside another If you need to call `podman-compose down` from inside `podman-compose up` do something like: ``` @cmd_run(podman_compose, 'up', 'up desc') def compose_up(compose, args): compose.commands['down'](compose, args) # or compose.commands['down'](argparse.Namespace(foo=123)) ``` ## Missing Commands (help needed) bundle Generate a Docker bundle from the Compose file config Validate and view the Compose file create Create services events Receive real time events from containers exec Execute a command in a running container images List images kill Kill containers logs View output from containers pause Pause services port Print the public port for a port binding ps List containers rm Remove stopped containers run Run a one-off command scale Set number of containers for a service top Display the running processes unpause Unpause services version Show the Docker-Compose version information