Bug #22669
closedChicken and egg versionoing problem between arvados gem and arvados-api-server package
Description
- source:services/api/Gemfile declares a dependency on the
arvados
gem, akasdk/ruby
. - Ideally that dependency should mean each version of the API server depends on the same version of the
arvados
gem, because that's how all our interdependencies usually work. - But the
arvados-api-server
package build wants to download all the gems it depends on. - So to have a same-version interdependency, we would need to publish the
arvados
gem before building thearvados-api-server
package. - And right now our entire release process is ordered the other way around: distro packages, then gems.
The proper way to fix this would be: declare a code freeze on sdk/ruby
, publish that gem, update services/api/Gemfile
to depend on that version, then continue with a release as normal. While this does require some process shuffling, I think that's basically all it is. The Ruby SDK doesn't get much development these days and there's no reason to expect that to change in the foreseeable future. Never say never but I think the risk that we publish an arvados
gem and then suddenly realize we want to push a last-minute fix before the rest of the release is pretty low.
The easiest thing to do is nothing, and just let this exception linger. By the same token, because the Ruby SDK gets so little development, the API server doesn't really need a lockstep version, just a recent-enough one, and this works okay. It's just a little awkward and a bad look.
The solution that would require the least process disruption but the most code would be to extend the arvados-api-server
package build so it builds a development version of the arvados
gem from source and bundles that with the package. Note this would require fussing with the packaged Gemfile.lock
too.
We have had related deployment bugs caused by failure to keep our own Gemfile dependencies in step with our release process. See #22364.
Updated by Peter Amstutz 13 days ago
It's always been this way, but I think you're right, the right process here is to publish the gem first, then update the API server's Gemfile, then do the rest of the release.
Where it gets weird is that technically we haven't been testing with the version being released. Since the Ruby SDK hasn't changed recently, that's fine.
When we do need to do this in the future, I think we can make dev or release candidate releases of the arvados gem that we can depend on in the API server during development, and then follow the process above for the stable release.
Updated by Peter Amstutz 13 days ago
- Target version set to Development 2025-03-19
I have updated https://dev.arvados.org/projects/arvados/wiki/Release_Checklist
Added these steps precluding "Build final release packages"
16 | release eng | Publish Ruby gems using build-publish-packages-python-ruby |
17 | release eng | Update Gemfile dependencies on Arvados gems to use the newly published Arvados gem |
Does that seem good to you?
Updated by Brett Smith 13 days ago
Peter Amstutz wrote in #note-2:
Does that seem good to you?
Yes. Expanding scope a little bit following what I flagged in Slack, we should probably expand step 17 to also update source:sdk/R/DESCRIPTION and arvados_pin_version
in source:tools/ansible/roles/arvados_apt/defaults/main.yml similarly.
Updated by Peter Amstutz 12 days ago
From discussion: merge step 3 in release checklist into step 17
Then automate it in #22370
Updated by Peter Amstutz 12 days ago
- Target version changed from Development 2025-03-19 to Development 2025-04-02
Updated by Peter Amstutz 12 days ago
- Assigned To set to Peter Amstutz
- Status changed from New to In Progress
Updated by Peter Amstutz 11 days ago
Updated the release checklist. Removed step 3 and put it all into step 16, which now lists the tasks for updating files that we want to be self-referential on the current version number. Updated arvados-dev TASKS as well.
For the 3.1.0 release I added steps for publishing the ruby gem and updating self-referential files as steps 15.1 and 15.2.