-
Notifications
You must be signed in to change notification settings - Fork 70
Image release pattern #62
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Thoughts about the description of the problem and a proposal, I don't think that supporting more that 3 images at the same time is a good idea (at the moment we have I would say to adopt a pattern like
If we follow this pattern, we don't have to much to do right now regarding the deprecation plan, since we will keep supporting all Regarding the UX, I think we need to send some kind of notification (email) to the user in a windows of 30 days each time a build is triggered.
|
I'm really confused by this, as it seems like there are a number of ways to handle this. I think the question that I'm struggling with are:
I think if we can define explicitly what cases we want to support, it will make the decision easier. My thinking is we want to support these things:
It feels like there is a tension here, because at some point if we remove old versions, it will break people. So I'm feeling kind of stuck and not knowing how to proceed. It seems like at some point we just need to stop supporting old images, but if we do that, then what is the value of even letting users define the image in the first place? |
I think one of the idea of giving the user the ability to define the image is useful to start testing/use new features in production without breaking everything. As we have done with the form that people filled for the "pinning a version and not break for a long time" is something that we can't guarantee 100% because we will need a lot of Gb in docker images --that's why I was proposing to use only three images and try to not break for a long time. |
It feels like "pinning the latest version" is "keep the default", which wouldn't even need a setting. It seems we really want a way to "opt into dev/beta" and "opt out of broken latest until I fix it on my side". |
From this comment I understand that a boolean, like: With my proposal of Besides, if you want to test new beta things, you can use Then, we will have relative versions that will point to a different version depending on time, like:
and, specific numbers that will point to a specific version if it's already supported or fallback to
|
So stable is the default if it isn’t defined? I’m +1 on that. |
Yes, |
I think I've waffled on this no less than 5 times writing this reply, so I'm going to dump my thoughts before I change my mind again. If we could support
This should also be viewed as what is the users' purpose for these images I suppose. In the end, I think users really only have two use cases:
This fits our ideas, except currently -- and with the plan above so far -- we're still pointing users to an unsupported image for new features. I think that is what needs to change -- we should treat the image like application code. If we support a feature, it should be a supported image. If not, we aren't pointing users to it. So, this effectively gets rid of the
There is also a change in procedure and how we do testing and release:
For example, the next few months look like this:
Key takeaways
|
I think that makes sense. "Let users opt into dev features" seems like a good idea, but we never actually execute it well, so I think it's an anti-feature. Agreed on "letting users opt into the old way when we break something" is the primary reason for this functionality. The other is "let users use custom build images", but I don't want to go down that road yet. |
I like this pattern. It's very similar to what I was proposing with small differences (no testing image for example) and with a good and explicit pattern on how we will release a new image. I think we can write a page documenting this process in our docs as a next step, and the following one is apply it with There is one thing that it's not clear to me: what the user will write in the Another thing is, if we are going to introduce new features in
I think this won't be a good idea in the future either, since one of the things we are trying to avoid is the having many images on disk. So, using a custom one (from docker hub, for example) will increase the size on disk a lot. |
I'd say both are allowed, but
Good question. I don't think we freeze anything, we'll only apply bugfixes to
+1 I'd like to get 3.0 out and starting to test in a wider audience. For next week, we can release an image and notify folks to start using it -- this release process also benefits my direct case, in that i can tell users to pin to image |
Okay, i updated our contributing docs and started building the new images. The rest will be changes in ops/prod, and on our yaml config. |
We have a few things to decide on given our release pattern here and the fact that we now allow arbitrary image selection through readthedocs.yml.
What to do with latest now?
latest
should probably be version3.0
by now. I'm 👍 on makinglatest
version3.0
and making this the default (on a feature flag to scale in perhaps). I think we should maybe move to a versioned approach tolatest
though, as our docs now point people to uselatest
and our newlatest
, based on Ubuntu 18.04, could introduce unwanted changes.This leads to another question.
How many images do users need access to?
It's helpful for users and for user to have some control over specific build image, however allowing users to select the minor version means we need to keep all these versions around, supported. I don't think it's necessary for users to have granular access to the minor versions.
This isn't a problem now, but if we semver our
latest
release, these versions will accumulate faster. We could end up with a list like:[(2,0), (3,0), (4,0), (4,1), (4,2)]
. This seems like a lot to support, without much gain.I think only supporting major versions in our config file makes sense, so
build.image
becomes an integer field.This leads to another question
How do we handle image deprecation?
Arbitrary image selection leads to the problem that users might want to pin to version
2.0
now, or as it stands with our current config,2.1
. At some point we don't want to support this image though, so we need a pattern now on warning users that their image will be deprecated soon.Things we do know
latest
tag, this puts them into a stream of build images that they need to get out of at some point. We should instruct3.0
explicitlyThe text was updated successfully, but these errors were encountered: