========================
ODCS command line client
========================

ODCS provides the ``odcs`` command line client which is provided in Fedora
by ``odcs-client`` package.

In this document, most common use-cases of ODCS client are explained.

Generating compose from Koji tag
================================

The most common use-case is generating compose with packages from Koji tag.

For example, you can create compose from ``epel7`` Koji tag with packages
``httpd`` and ``mod_perl`` including their dependencies:

``$ odcs create tag epel7 "httpd mod_perl"``

If you do not want to include the dependencies in a resulting compose,
you can use the ``--flag no_deps`` flag. This will also make compose faster.

In case your Koji tag contains unsigned packages, you need to enable composes
with unsigned packages by using ``--sigkey none`` option.

Generating compose with cherry-picked modules
=============================================

ODCS is used quite often to test modules after they are built. You only
need to know ``NAME:STREAM``, ``NAME:STREAM:VERSION`` or
``NAME:STREAM:VERSION:CONTEXT`` of the module you want to include in the
compose.

For example, you can create compose with latest version and all contexts of
``testmodule:master``, including its **modular** dependencies:

``$ odcs create module testmodule:master``

Instead of getting latest version of modules, ``--modular-tag`` option could
be used to getting module and its **modular** dependencies from the specified
Koji tag.

``$ odcs create module testmodule:master --modular-tag testmodule-tag``

Again, if the packages in a module are not signed yet, you need to use
``--sigkey none``.

In case you do not want the modular dependencies in a compose, you can use
``--flag no_deps``.

**Note** that the ``platform`` module is not treated as modular dependency
and modules generated using ``create module`` sub-commands will not include
RPMs from the virtual ``platform`` module. This is done by design to not
make composes unnecessary big. You can use "hybrid" compose described
later in this doc.

Selecting modules
-----------------

If you specify a ``name:stream`` without specifying a ``version:context``,
ODCS will query MBS to find the very latest ``version:context`` build. For
example, if you specify ``go-toolset:rhel8``, ODCS will query MBS for the
latest ``go-toolset`` module build for the ``rhel8`` stream, whereas if you
specify ``go-toolset:rhel8:8020020200128163444:0ab52eed``, ODCS will compose
that exact module instead.

Generating compose with cherry-picked Koji builds
=================================================

In case you have list of Koji builds in the NVR form, you can use them
directly to generate the compose:

``$ odcs create build "httpd-2.4.38-2.fc29 mod_perl-2.0.10-13.fc29"``

Generating hybrid compose with both modules and bare RPMs
=========================================================

TODO

Generating compose with lookaside repositories
==============================================

TODO