Now that we're delivering a whole bunch more variants, with more to come, I'd like to discuss tagging and registry organization.
We are currently delivering into folders:
base, base-debian9, base-debian10, cc, cc-debian9, cc-debian10, static, static-debian9, static-debian10, python2.7, python-debian9, python2.7-debian10, java, java/jetty, nodejs, python3, python3-debian9, python3-debian10, dotnet
And we deliver several variants of these images in each of the folders, tagging them things like:
latest, nonroot, debug, debug-nonroot, 8, 8-debug, 11, 11-debug, java8, java8-debug, java11, java11-debug
What's wrong with that you might ask?
1) When we deliver a new version of the images, the tags move to point to the new variants, and we lose any idea of which of the old versions were vanilla, nonroot, debug, java8, or java11.
2) Subsequently there is no way to find the last X versions of 'nonroot' if you're trying to debug your runtime environment
3) Variant labeling is inconsistent from folder to folder. We have python2.7 and python3 folders, but java8 and java11 tags
4) We have to combine variant information into one namespace, leading to things like debug-nonroot, or java8-debug-nonroot-milkshake-frenchfries or something
5) We can't use 'staging' tags to deliver and then test new sets of images
Proposal:
I'm going to recommend using registry folders to contain all information regarding baseOS, language, version, and variant. The only tags that will be used are 'latest' and 'staging.' The primary variant will be delivered in the base directory, every other variant or variant combination will have another folder.
e.g.
will become
will become
becomes
becomes
becomes
becomes
Any thoughts before I start on the PR?