-
Notifications
You must be signed in to change notification settings - Fork 2
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
supporting a build matrix #10
Comments
I'm about to go approve / thumbs up the PR, having read through the updated docs, which are great. I have one general, and one specific comment:
|
Historically I have spent an embarrassingly large amount of time on docker/ci related things, but 95% of my time is spent figuring out what to try and then watching CI TV as automated machinery runs. It's typically a slow feedback loop. I'm hopeful that re-executing the steps of a known process will be a comparatively small thing. 🤞
That sounds good to me! I'm definitely open to automation if and when we have confidence the process itself makes sense, and willing to do carry the load of the manual process in the meanwhile. Feel free to tag me if there's a proj update you'd like to offload. |
Heads up that I am currently mucking around in the georust dockerhub in pursuit of having an array of containers to test support on different versions of rust.
I can think of several approaches, but as usual, I'm adrift in a the docker sea. It's not clear to me what the best way to organize a matrix of containers is, so I'm experimenting a bit. I'm intending not to break anything, but... let me know if I have.
This is kind of a free-form/discussion issue. I'm not blocked or anything, so don't feel like you need to read unless you're interested.
One piece of background context I'm learning is that conventionally docker "tags" aren't intended to be immutable like a "tag" in git, but instead refer to something more like a "release track" or a "semver" spec.
For example, the
rust:1.45
tag can be read as "the latest rust container published for rust 1.45.*". Depending on when your container was built, this might have been 1.45.0, 1.45.1, or 1.45.2. (see https://hub.docker.com/_/rust?tab=tags&page=1&ordering=last_updated&name=1.45). This is by design apparently.If you want to use a specific rust version only, you could pin to the 3 section tag for the patch version
rust:1.45.1
, or I suppose to the container sha if you're really paranoid.So, running with that, it's entirely normal that I could publish
geo-ci:rust-1.50
, and then if rust has a1.50.1
release, to rebuild and clobber thegeo-ci:rust-1.50
tag with a new container which will be based on therust:1.50.1
base container. We could track minor patch versions if we wanted, but that seems like overkill for now.So, I'm currently setting up docker hub to build and tag e.g.
geo-ci:rust-1.49
,geo-ci:rust-1.50
.@urschrei - if you're ok with it, I'd like to also roll out this convention for the
proj
family of containers.My understanding is that proj only officially supports one version (the latest) of libproj at a given time. So given that, I suppose we don't really need to include the proj version in the tag name, and can use the same
proj-ci:rust-1.49
,proj-ci:rust-1.50
.At such a time when proj officially supports a window of proj releases (which I think would be great!), the best scheme I can come up with would be a two dimensional tag like:
proj-ci:proj-7.2.0-rust-1.49
,proj-ci:proj-7.2.1-rust-1.49
,proj-ci:proj-7.2.0-rust-1.50
,proj-ci:proj-7.2.1-rust-1.50
If you'd prefer, I'm also OK with doing the two dimensional tagging now even with only one proj version in play, just to be really precise about what's being used where.
One day I'd also like to add a
geo-ci:rust-nightly
that rebuilds on a schedule. Probably we wouldn't want to fail CI's with it, but it seems like it'd at least be good to know.I'm currently pursuing a file structure, I believe similar to what rust does for its own official containers, where each supported version has its Dockerfiles exist in a duplicated directory.
e.g.
An alternative I considered was to have a branch per-supported rust track. e.g.
branch: "supported-builds/rust-1.49"
branch: "supported-builds/rust-1.50"
Which I think would also work, but it felt less discoverable to encode essential operational information in branch structure.
The text was updated successfully, but these errors were encountered: