Description
Motivation
While devcontainers features aim to enable modern software development, the feature code itself is stuck in a lot of code duplication.
For example we can find # Determine the appropriate non-root user
17 times within the features repo. It's the same for me for detecting python version etc etc.
One of the main principles in software development is DRY: Don't Repeat Yourself. That is currently not possible for features!
Proposal
Variant: generic pre-build
Add support for pre-build.sh (in src/_pre_build.sh, src/_pre_build/pre_build.sh, src/_special_cli_stuff/pre_build.sh) which would be executed upon build and feature test calls with an appropriate set of parameters. This way the script can do arbitrary things like copy common code. But it could do even more like downloading common code from yet another source. It could merge code into single files. etc.
Variant: common code
Add support for src/_common which could contain code that is used throughout my features. Build and feature test calls will package that code as well as the install.sh script of the feature. Within install.sh one can simply source/call anything from _common as it's part of the package.
P.S. I wasn't sure whether to put this to cli or spec, please move if incorrect.