OpenSwitch Development Tool
===========================

-----

.. contents:: **Table of Contents**
    :backlinks: none

Installation
------------

opx is distributed on `PyPI <https://pypi.org>`_ as a universal
wheel and is available on Linux/macOS and Windows and supports
Python 3.6+ and PyPy.

.. code-block:: bash

    $ pip install opx

Requirements
~~~~~~~~~~~~

- `Docker <https://docs.docker.com/engine/installation/>`_
- `Repo <https://source.android.com/setup/downloading#installing-repo>`_

Getting Started
---------------

.. code-block:: bash

    # initialize your workspace
    $ opx init

    # build all packages
    $ opx build

    # enter a development shell and build a package
    $ opx shell
    opx@XXXXXXXXXXXX:/mnt$ cd opx-logging
    opx@XXXXXXXXXXXX:/mnt$ mk-build-deps --root-cmd sudo --install --remove
    opx@XXXXXXXXXXXX:/mnt$ dpkg-buildpackage -us -uc
    opx@XXXXXXXXXXXX:/mnt$ fakeroot debian/rules binary
    opx@XXXXXXXXXXXX:/mnt$ exit

    # assemble an installer
    $ opx assemble --dist 2.2

    # remove persistent container
    $ opx remove

    # you can also choose to remove the container when a command finishes
    $ opx assemble --dist 2.2 --remove-container

    # clean up workspace completely
    $ rm -rf opx-*/ .repo
    $ opx cleanup

New Features (Over ``opx-build``)
---------------------------------

* Persistent containers (if inside a workspace)

.. code-block:: bash

    $ opx shell
    opx@XXXXXXXXXXXX:/mnt$ echo foo > /bar
    opx@XXXXXXXXXXXX:/mnt$ exit
    $ opx shell
    opx@XXXXXXXXXXXX:/mnt$ cat /bar
    foo

Command Line Completion
-----------------------

Run the command corresponding with your shell. Add to your shell startup file for persistent autocomplete.

.. code-block::

    # bash
    $ eval "$(_OPX_COMPLETE=source-bash opx)"

    # zsh
    $ eval "$(_OPX_COMPLETE=source-zsh opx)"

    # fish
    $ eval (env _OPX_COMPLETE=source-fish opx)

Planned Features
----------------

* Port ``opx_build`` from shell to python
* Port ``opx_rel_pkgasm`` from python script to module
* Port ``opx_get_packages`` from python script to module
* Port ``opx_bld_basics`` from python script to module

License
-------

opx is distributed under the terms of the
`MIT License <https://choosealicense.com/licenses/mit>`_.
