If it helps:
I build full stack, mostly polyglot applications (usually C and C#) frameworks w/web-apps and I just take my Linux bundles and package them inside a container as part of a CI. The requires user's users to build containers locally, but it does ensure that builds are consistent with bare-metal and containerized, plus it makes CI easy. I then give users a Taskfile.dev script for cross-platform bootstrapping. It's not a complete solution, but I think it's a good middle ground.
That being said, it now cost's me very little, aside from testing time, to target both containers and bare-metal.
CI = continuous integration? I’m learning new words 😅
Lol, yessir! There are so many different things. Again personally, I built my own tools for CI because there are so many big tools that can get you stuck in their way of building things IMO, or stuck working inside docker containers making your repo all messy. I opted for using https://taskfile.dev and my custom orchestration tool.