tree 71bd677a67ee92ea0e51efcf19928cb9b7f0d79b
parent 42cf63bbdae55608bc61e3e00731d3d52101912d
author Andrei Litvin <andy314@gmail.com> 1687560578 -0400
committer GitHub <noreply@github.com> 1687560578 +0000
gpgsig -----BEGIN PGP SIGNATURE-----
 
 wsBcBAABCAAQBQJkliGCCRBK7hj4Ov3rIwAA/a8IAF7QBEIkpy6I3rpqI+6QIKf/
 BIkbz3e3OSWjk4nCw4i4DSVQNIwrK9Hsq2yetKY5H0zBGy3ns1kqRiM+LgOcvSlB
 MprE8hxrv61Hr0agqc0+dLI5Fp8s9jfHDp0YcStamFgsNPe+ySEJ6HgAJH3Qn64X
 XO4Pwi8dzm34tPLqL0fM5GxA+IoGVP51+ZNTjjJ2vkD3X29EXgCoCiitKQw0eshs
 lSoWAwzTdPvrZsTTVItB4ENY95kfvmCoDvf1w90n43D57DeFmZroXyyuxbhVzaqi
 ciHRmW04tJHRjHZDFonC22hYrtHkbcZnbkNmJ4PkE3clCy7sLXGe/80v4f0uu54=
 =EUdU
 -----END PGP SIGNATURE-----
 

Remove `install into build-env` from `build_python.sh` (#27437)

* Start removing the option for install_wheel in the build environment

* Move java tests to use a separate build environment

* Update openiotsdk ... i am unclear why the python controller was built at all, but testing out and expecting compile errors.

* Remove force reinstall option as it should not be needed on clean environments

* Restyle

* Fix typo

* Update tests.yaml for the new args as well

* Update openiotsdk to run tests in the configured venv

* Ensure more pip packages available in venv, at least click and probably more

* Update one guide and tests

* update java tests to install basic prerequisites

* Install yaml tests requirement in venv

* Restyle

* Update openiot to not automatically activate every time

* Restyle

* Install colorama in unit test venv

* add colorama to java tests venv as well

* Add pyasn1 to items install by the repl tests

* Install more required items