Replies: 6 comments 11 replies
-
Can you clarify? The only case I can see where a range dep is needed is if you want to update component crates before the updated ZV version is available, but I don't see why that is a requirement. |
Beta Was this translation helpful? Give feedback.
-
Largely as a future compatability thing: eventually we'd like to use this in the Bake impl in some cases and avoid unsafe. |
Beta Was this translation helpful? Give feedback.
-
Another learning IMO is that we need to get better about understanding the failure status of the tutorials task (I don't fully understand when it's a real failure), and get rid of testdata ASAP so its presence isn't a wrench in the works. |
Beta Was this translation helpful? Give feedback.
-
@mhatzl noted another issue in #4088 (comment) which is that if you rely on cargo install to get a Datagen binary, you can't easily do the pinning solution described above. |
Beta Was this translation helpful? Give feedback.
-
One problem is that cargo does not seem smart enough to always correctly resolve the range dep uniformly, and will often end up resolving both especially when upgrading from an existing lockfile. I think there are a couple things we can do to mitigate this. In the long run, I think for zerovec and yoke it would be nice to primarily use them via the In the short run, I would like to publish patch releases for every component and util with a direct dep on zerovec that moves it to 0.10.0. In general I think the ideal process for a breaking change in a util is:
This gives a nice migration curve. That said, it's a lot of work, and I can understand wanting to forgo this entirely for future util breakages. The policy I'd like to have is "either we do it right (the way above), or we just do a breaking change with no range dep". Thoughts? And thoughts on performing that step now? Note that unless we do |
Beta Was this translation helpful? Give feedback.
-
I think we should endeavor to simplify the release process. The proposed steps require a very high level of expertise in Cargo and dep resolution, and it's not something I would feel confident putting in a release operator handbook. With increased complexity comes increased opportunity to do something wrong. Causing rippling, hard-to-diagnose breakages from a lower-level library in the Cargo build system seems like something worth avoiding, even at the cost of increasing cost to non-cargo clients. I therefore am leaning toward recommending that when we need to upgrade a util, we should just upgrade the util and not bother with the intermediate range dep release. |
Beta Was this translation helpful? Give feedback.
-
I wanted to document the outcome of the 1.3 release, problems that occurred during the release, and mitigations for both clients and team members for future releases.
Summary
ICU4X 1.3 was fully released. However, clients attempting to install or upgrade ICU4X over the weekend, while the release was in progress, received errors involving ZeroVec/AsULE reading like the following:
Further, these errors still occur for users attempting to install icu version
=1.2
in their Cargo.toml files.Mitigation
Clients who created an ICU4X lockfile prior to the 1.3 release should continue to work. Furthermore, clients who install or upgrade to ICU4X 1.3 should succeed if performed after Monday, September 25.
However, users who attempt to install a pinned version of ICU4X 1.2 may need to perform additional steps. Recommendations:
cargo update -p ...
to force the correct versions to be installed.However, please note that ICU4X 1.3 does not include a new CLDR release. It should therefore be a lower-impact change to just upgrade to ICU4X 1.3; there should not be a major reason to keep using 1.2.
Sequence of Events
impl Bake for ZeroVec<T>
added a newT: Bake
bound. After a brief discussion with @sffc, it was decided to move forward with a patch release to zerovec despite the breaking change. This is because breaking changes are disruptive to users not in the Cargo ecosystem so are best avoided, and we believed that the impact would be small because we verified that all ICU4X types used in a ZeroVec already implementedT: Bake
. e16ba52tutorials-cratesio
job had started failing. @sffc found that at least one type used in a ZeroVec, one in theicu_timezone
crate, did not implementBake
in the 1.2 release, so allowing Cargo to resolve to 0.9.5 was breaking these clients. After briefly discussing with @Manishearth, it was decided to roll out 0.9.6, rolling back the addition ofT: Bake
. Another option considered was to releaseicu_timezone 1.2.1
to add theBake
impl, but this was eliminated because it was not known how many more crates would have the same problem. 6a787bb. @sffc verified thattutorials-cratesio
began passing again after 0.9.6 was released.T: Bake
and prepared zerovec 0.10.0 for release. As part of this, @Manishearth introduced a new range bound such that all ICU4X crates will depend onzerovec >=0.9.6 <0.11
so that either 0.9.6 or 0.10.0 can be used with ICU4X 1.3. 5ced07eAsULE
errors began appearing again intutorials-cratesio
. @sffc decided to ignore these errors with the expectation that they go away after finishing the 1.3 release, since the errors most likely originated from incompatibleicu_testdata
baked data versions. Update ICU component version numbers #4079tinystr
, @sffc encountered theAsULE
error fromcargo publish
. @sffc investigated and found thattinystr
had a dependency on zerovec 0.9 only, so it was not implementing theAsULE
trait from zerovec 0.10. To fix this, @sffc released a new version of tinystr with the range dep. 663b738tutorials-cratesio
was still failing due toicu_testdata
not yet being available at 1.3. @robertbastian resolved this by releasingicu_testdata
on Monday, September 25. Temporarily add testdata to repo #4091Learnings
T: Bake
was necessary to add. Since it seems avoidable, it could have been saved for the ICU4X 2.0 release where we can absorb breaking changes more easily.icu_timezone 1.2.1
could have been considered more seriously.AsULE
to co-exist in the dependency tree. Without a range dep,tinystr
would have needed to have been version bumped, and then 1.2 would be purely zerovec 0.9, and 1.3 purely zerovec 0.10.tutorials-cratesio
failure was noticed and verified.Beta Was this translation helpful? Give feedback.
All reactions