-
Notifications
You must be signed in to change notification settings - Fork 8.5k
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
confusing, conflicting version indication #14106
Comments
Similar issue. Application stopped launching today so I installed the latest release version and received the following: "Windows cannot install package Microsoft.WindowsTerminal_1.15.2524.0_x64__8wekyb3d8bbwe because it has version 1.15.2524.0. A higher version 1.15.2712.0 of this package is already installed." I do not have the exact version that was originally installed, but it was installed in Nov 2021, so needless to say it wasn't 2524 or 2712. Was an update pushed too early? Also confused.... |
Thanks for bringing this up! It's definitely an issue, but more one of poor communication than anything else. Every build of Terminal that we publish to the store is actually two packages, targeting different versions of Windows. For various reasons, those packages cannot have the same version number; they are, however, built from the same code. For various other reasons, the final version component must be Because of that, building Terminal will produce two packages versioned I've therefore been releasing them both under the "1.0.10" banner, but I've been tagging the release to match the first-produced package (in this case, The feedback here indicates that I should change:
The last bit is that I did not publish the changelog for the 1.15.271 release cycle. Sorry about that. |
This is completely nonstandard and in conflict with Semantic Versioning comparison rules. It will break any automated admin tools that makes decisions about upgrading, not to mention causing humans the type of confusion that happened here. Pretending that Please consider changing to a conventional approach. Semantic versioning has "metadata" for exactly this kind of situation. If Windows can't handle semantic versioning, well, that's another story. But arbitrarily placing invisible delimiters within the version string is not a good workaround. |
Sorry if I jumped the gun and commented before I saw the rest of your reply. As for what you should do, above all you should be following Semantic Versioning. This would mean:
|
Oh, I see now that the |
Oh, it's so much worse than all that. We were never intentionally trying to follow SemVer (though I do hold it in high regard, and wish I could stay within its light), but until recently we somewhat were.
The real issue here is the Windows Store. In an ideal world, Terminal would just follow semantic versioning and call it a day. Unfortunately, we're regretfully hampered by a couple limitations.
Under the hood, we actually use a date-based versioning scheme. It's "okay" for most purposes and always monotonically increasing. That is, Now, for limitation 4: we want to follow this versioning scheme because that's the one used by all internally-produced Windows applications that build outside the operating system. I know, it's not a great reason. It could even be called an artificial limitation. Anyway, due to limitation 2 above, we get to compress the available version space into three components for the final package file that gets uploaded to the store. Thanks to limitation 1, we can't exactly store The internally-popular versioning implementation has an answer to this, though! Epoch and day count. If taken as a historical relic that we shouldn't talk about, all of this would be fine... ...until I had to produce two nearly identical versions of the application during the same build. The format doesn't leave us a lot of fields to work with, so we opted to increment the Anyway, all this so that now I'm looking for options that reduce the cognitive dissonance.
The store APIs (and those for package servicing) will expose any version number we encode in our package, even if it's for mechanical/deployment purposes only. I don't think I could ever get rid of it from the public eye entirely.
I wish! I think the store just compares the version as a 64-bit number. ThoughtsI'd love to switch over to semver, and I think Azure DevOps supports storing an ever-incrementing variable across runs that we could key on the Citing sourcesThe part of the code that increments
|
<!-- | |
The Windows 11 build is going to have the same package name, so it *must* have a different version. | |
The easiest way for us to do this is to add 1 to the revision field. | |
In short, for a given Terminal build 1.11, we will emit two different versions (assume this is build | |
4 on day 23 of the year): | |
- 1.11.234.0 for Windows 10 | |
- 1.11.235.0 for Windows 11 | |
This presents a potential for conflicts if we want to ship two builds produced back to back on the | |
same day... which is terribly unlikely. | |
--> | |
<VersionBuildRevision Condition="'$(TerminalTargetWindowsVersion)'=='Win11' and '$(VersionBuildRevision)'!=''">$([MSBuild]::Add($(VersionBuildRevision), 1))</VersionBuildRevision> |
The commit whose body describes (in brief) how all this versioning works for our different product outputs
I wish GitHub had 😱 as a reaction to posts, that was literally me when reading this explanation. |
Don't forget this one: 🤦♂️ |
Looping back on this - I'm yanking triage and converting this to track specifically:
|
FWIW I think this might do the second bit, diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp
index c9aa9ff8e..3c6378c66 100644
--- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp
+++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp
@@ -1015,7 +1015,7 @@ winrt::hstring CascadiaSettings::ApplicationVersion()
{
const auto package{ winrt::Windows::ApplicationModel::Package::Current() };
const auto version{ package.Id().Version() };
- winrt::hstring formatted{ wil::str_printf<std::wstring>(L"%u.%u.%u.%u", version.Major, version.Minor, version.Build, version.Revision) };
+ winrt::hstring formatted{ wil::str_printf<std::wstring>(L"%u.%u.%u", version.Major, version.Minor, version.Build / 10) };
return formatted;
}
CATCH_LOG();
The first bit is just paperwork. |
As of about 2022, the one's digit of the Build of our version is a placeholder value to differentiate the Windows 10 build from the Windows 11 build. Let's trim that out, it's only a source of confusion. For additional clarity, let's omit the Revision, which _must_ be `.0`, and doesn't provide any value to report. We will need to make sure we report releases as `1.17.ABC` now, instead of `1.17.ABC1.0`/`1.17.ABC2.0` Let's not backport this. 1.17 will be the start of the new numbering scheme. Otherwise, `1.16.EFG` < `1.16.ABC1.0`, for an old version `ABC1` and a new version `EFG`. * closes #14106 * As summarized here: #14106 (comment)
🎉This issue was addressed in #14660, which has now been successfully released as Handy links: |
We ship a separate package to Windows 10, which contains a copy of XAML embedded in it, because of a bug in activating classes from framework packages while we're elevated. We did this to avoid wasting disk space on Windows 11 installs (which is critical given that we're preinstalled in the Windows image.) The fix for this issue was released in a servicing update in April 2022. Thanks to KB5011831, we no longer need this workaround! And finally, this means that we no longer need to depend on a copy of "pre-release" XAML. We only did that because it would copy all of its assets into our package. Introduced in #12560 Closes #14106 Closes (discussion) #14981 Reverts #14660
We ship a separate package to Windows 10, which contains a copy of XAML embedded in it, because of a bug in activating classes from framework packages while we're elevated. We did this to avoid wasting disk space on Windows 11 installs (which is critical given that we're preinstalled in the Windows image.) The fix for this issue was released in a servicing update in April 2022. Thanks to KB5011831, we no longer need this workaround! And finally, this means that we no longer need to depend on a copy of "pre-release" XAML. We only did that because it would copy all of its assets into our package. Introduced in #12560 Closes #14106 Closes (discussion) #14981 Reverts #14660 (cherry picked from commit f5e9e8e) Service-Card-Id: 88600517 Service-Version: 1.17
I'm finding the version indication confusing. My use case is simple:
That seems to be a reasonable sequence of events for any software for a power user. But with Windows Terminal, this is what happens:
Microsoft.WindowsTerminal_Win10_1.14.1962.0_8wekyb3d8bbwe.msixbundle
, because that's the last installer I have saved.About
in Windows Terminal shows v1.15.2712.0. Did it auto-update at some point? Maybe; I don't remember. But no problem, I can just check the changelog, right?1.15.2712.0
. It isn't found.v1.15.2524.0
. Oh, so maybe they are chopping off digits in the official version number? Is GitHub doing this?I'm a little confused here.
The text was updated successfully, but these errors were encountered: