blob: 9420b0c9fe39ee82273e048ae1becf2643b79090 [file] [log] [blame]
.. howto_code_voltha-protos:
Modifying repository voltha-protos
==================================
#. Clone repository `voltha-protos <https://gerrit.opencord.org/plugins/gitiles/voltha-protos/+/refs/heads/master>`_
#. Modify structures, sources & makefiles as needed.
#. Build, test and lint locally to validate sources.
#. Commit changes, code review, jenins build and deploy.
#. Update external dependent repositories to use the new version.
Clone, edit, build & test
-------------------------
.. code:: bash
git clone ssh://gerrit.opencord.org:29418/voltha-protos.git
cd voltha-protos
vi ...
% make lint
% make build
% make test
.. list-table:: Build & Test locally
:widths: 30, 80
:header-rows: 1
* - Command
- Description
* - make sterile
- Remove previously generated targets
* - make protos
- Generate prototypes for go, java & python (dependency for target:build)
* - make build
- make protos; compile: go, java & python
* - make test
- Validate proto changes
* - make lint
- Syntax check sources prior to commit.
Update all external repositories to consume the new repo:voltha-protos version
------------------------------------------------------------------------------
- Each external VOLTHA repository will need to have dependencies mentioned in
the file go.mod updated.
- Rebuild each repository in hierarchial order also updating external libs as
they are rebuilt.
.. list-table:: External repositories to modify
:widths: 30, 80
:header-rows: 1
* - Repository
- File(s) to edit
* - bbsim
- `go.mod <https://gerrit.opencord.org/plugins/gitiles/bbsim/+/refs/heads/master/go.mod>`_
* - ofagent-go
- `go.mod <https://gerrit.opencord.org/plugins/gitiles/ofagent-go/+/refs/heads/master/go.mod>`__
* - voltctl
- `go.mod <https://gerrit.opencord.org/plugins/gitiles/voltctl/+/refs/heads/master/go.mod>`__
* - voltha-go
- `go.mod <https://gerrit.opencord.org/plugins/gitiles/voltha-go/+/refs/heads/master/go.mod>`__
* - voltha-go-controller
- `go.mod <https://gerrit.opencord.org/plugins/gitiles/voltha-go-controller/+/refs/heads/master/go.mod>`__
* - voltha-lib-go
- `go.mod <https://gerrit.opencord.org/plugins/gitiles/voltha-lib-go/+/refs/heads/master/go.mod>`__
* - voltha-openolt-adapter
- `go.mod <https://gerrit.opencord.org/plugins/gitiles/voltha-openolt-adapter/+/refs/heads/master/go.mod>`__
* - voltha-openonu-adapter-go
- `go.mod <https://gerrit.opencord.org/plugins/gitiles/voltha-openonu-adapter-go/+/refs/heads/master/go.mod>`__
* - voltha-system-tests
- `requirements.txt <https://gerrit.opencord.org/plugins/gitiles/voltha-system-tests/+/refs/heads/master/requirements.txt>`_ (virtualenv/testing)
.. list-table:: Foreach external repository
:widths: 30, 80
:header-rows: 1
* - Command
- Description
* - vi {repo}/go.mod
- Bump version of repo:voltha-proto to latest published
* - vi {repo}/go.mod
- Bump external module version(s) during hierarcical build.
* - go mod edit -replace [...]
- Use the go mod tool to update version of voltha-protos and friends.
* - go mod tidy
- Cleanup syntax issues in golang source that will fail your pending commit
* - go mod vendor
- | Update sources and dependencies beneath the vendor/ directory.
| See also `go-mod-vendor <https://go.dev/ref/mod#go-mod-vendor>`_, `Packages & Modules <https://golangbyexample.com/packages-modules-go-second/>`_
* - make build
- Compile with updated module dependencies.
* - make test
- Sanity check everything is still working.
* - make lint LOCAL_FIX_PERMS=1
- | Syntax check sources for problems prior to checkin.
| LOCAL_FIX_PERMS=1 (optional) can workaround docker related permission problems.
Problems with pip install
-------------------------
- grpcio `VOL-5348 <https://jira.opencord.org/browse/VOL-5348>`__
- Clone repo.
- Create a skeleton pytyon virtualenv.
- From requirements.txt file entries, pip install failing versioned package.
.. code:: bash
:caption: Pip install debugging
# Debug using virtualenv
% virtualenv -p python3 .venv
% source .venv/bin/activate
% pip install grpcio==1.39.0
# Debug using makefile target 'venv'
% echo > requirements.txt
% make venv
% git checkout requirements.txt
% pip install -r requirements.txt
longintrepr.h
^^^^^^^^^^^^^
.. code:: bash
:caption: Include missing header
mkdir -p include
pusdh include
find /usr/include -name 'longintrepr.h' -print0 | xargs -0 -I'{}' ln -s {} .
popd include
export CFLAGS='-I./include'