A little context before the actual questions. As a project that I have worked 
on grew, the number of repositories used for the application we're developing 
grew as well. To the point that it's gotten unbearable to keep making 
modifications to the codebase: when something is changed in the core library in 
one repository we need to make adjustments to other Python middleware projects 
that use this library. Whereas this sounds not that terrifying, managing this 
in Yocto has become a burden: on every version bump of the Python library we 
need to bump all of the dependant projects as well. After some thinking, we 
decided to try a monorepo approach to deal with the complexity. I'm omitting 
the logic behind choosing this approach but I can delve into it if you think 
this is wrong.

1) Phase 1 was easy. Just bring every component of our middleware to one 
repository. Right now we have a big repository with more than git 20 
submodules. Submodules will be gone once we finish the transition but as the 
project doesn't stop while we're doing the transition, submodules were chosen 
to track the changes and keep the monorepo up to date. Every submodule is a 
Python code with a setup.py/Pipfile et al. that does the bootstrapping.

2) Phase 2 is to integrate everything in Yocto. It has turned out to be more 
difficult than I had anticipated.

Right now we have this:

*Application monorepo*

Pipfile
python - library1 / setup. py
python - library1 / Makefile
python - library1 / python - library1 /< code >

python - library2 / setup. py
python - library2 / Makefile
python - library2 / python - library2 /< code >

...
python - libraryN / setup. py
python - libraryN / Makefile
python - libraryN / python - libraryN /< code >

Naturally, right now we have python-library1_<some_version>.bb , 
python-library2_<some_other_version>.bb in Yocto. Now we want to get rid of 
this version hell and stick to monorepo versions so that we could have just 
monorepo_1.0.bb that is to be updated when anything changes in any part.

Right now I have the layout described below.

*monorepo.inc* is as follows:

SRC_URI =< gitsm :// the location of the monorepo , branch =...,>
S = "${WORKDIR}/git"
SRCREV = <hash>

*python-libraryN.inc:*

require monorepo.inc
S = "${WORKDIR}/git/python-libraryN"
inherit setuptools

#some libraries also use entry points and the recipe needs to inherit systemd 
to enable some services.

This approach works. But it has a very significant drawback I can't ignore. 
Every time SRCREV (or PV/tag in the future) is changed every recipe downloads 
the whole repository that is quite big.

So, well, the question is how to structure the Yocto recipes for Python 
monorepo manipulation? I'm looking for a way to trick do_unpack and do_fetch to 
their thing on the monorepo basis.

This ( 
https://www.yoctoproject.org/docs/current/bitbake-user-manual/bitbake-user-manual.html#ref-bitbake-tasklist
 ) section of the documentation makes me think that I'm approaching this task 
wrong. I was trying to decipher gcc-source.inc and gcc-shared-source.inc files 
in the poky but they are out of my depth for now and look a little bit 
overcomplicated for my use-case. So basically my question boils down to how to 
deal with multiple recipes referencing the same source. Any structural change 
to either the monorepo or the recipe structure can be done now, so I would be 
very grateful for any feedback.

P.S. 1) The monorepo structure is not set in stone so if you have any 
suggestions, I'm more than open to any criticism 2) The.inc file structure 
might not be suitable for another reason. This stack is deployed across a dozen 
of different devices and some of those python-library_N.bb have.bbappends in 
other layers that are custom for the devices. I mean that some of them might 
require different components of the system installed or some configs and files/ 
modifications.

Any suggestion on how to deal with the complexity of a big Python application 
in Yocto will be welcome. Thanks in advance.
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.

View/Reply Online (#47584): https://lists.yoctoproject.org/g/yocto/message/47584
Mute This Topic: https://lists.yoctoproject.org/mt/67468660/21656
Mute #yocto: https://lists.yoctoproject.org/mk?hashtag=yocto&subid=6691583
Mute #python: https://lists.yoctoproject.org/mk?hashtag=python&subid=6691583
Mute #monorepo: https://lists.yoctoproject.org/mk?hashtag=monorepo&subid=6691583
Group Owner: [email protected]
Unsubscribe: https://lists.yoctoproject.org/g/yocto/unsub  
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to