Skip to content

(release) 3.1.0#1135

Merged
st3phhays merged 16 commits into
masterfrom
release/3.1.0
May 12, 2026
Merged

(release) 3.1.0#1135
st3phhays merged 16 commits into
masterfrom
release/3.1.0

Conversation

@corbob

@corbob corbob commented May 12, 2026

Copy link
Copy Markdown
Member

This is the finalization of the Chocolatey GUI 3.1.0 release. This includes the milestone https://github.com/chocolatey/ChocolateyGUI/milestone/41

gep13 and others added 16 commits March 19, 2026 12:36
(maint) Finish the 3.0.0 release by merging master to develop
Update assembly signing conditions across project files to validate both
that the CHOCOLATEY_OFFICIAL_KEY variable is set and that the key
fileactually exists on disk. This prevents test failures when the
variableis defined but points to a non-existent file path, and ensures
that theassemblies are always signed.Key Changes:- Add file existence
check to PropertyGroup conditions in relevant  project files.Reason for
the change:- Prevent test failures when signing key variable is set but
file does  not exist.- Improve build reliability by checking both
variable and file  existence.
…alidation

(maint) Fix assembly not signed if environment key doesn't exist
(maint) merge master back to develop (v3.0.1)
This commit adds log4net as a top-level dependency to decouple the
log4net dependency from Chocolatey.lib. This allows us to control the
shipped version of log4net without having to take new dependencies on
Chocolatey.lib.
(#1132) Update log4net dependency
This is a fairly significant overhaul of how the Chocolatey GUI internal
messaging is done, in order to work around an issue that was idenitifed
with the process of upgrading packages, when there is a prerelease
version of the package available from a remote source.  There were a
combination of issues are play here, and I think it is safe to say that
this _never_ worked.  What follows is a summary of the changes that had
to be made in order to get things to work, along with some other minor
tweaks that had to be made in order to get things to work cleanly. The
root of the problem was essentially that the RemoteSourceViews and some
of the methods that are executed in the ChocolateyService, simply didn't
know anything about prerelease packages.  As a result, the ability to
use the Upgrade Context menu action was never presented, and the
Outdated/Installed status for a package was never updated correctly.

- In order to keep information about the remote package that was located
  for a RemoteSource, we need to keep information about it around, so
  that this information can be used at later times.  To that end, the
  ChocolateySource and RemoteVersion properties were added to the
  IPackageViewModel interface.
- On the IChocolateyService, two new methods were added that can take
  into account what package version is being acted on, and also which
  RemoteSource made the request.  This latter part is important when it
  comes to updating information about packages.  In addition, the
  packageName argument was removed from the GetOutdatedPackages method,
  as this is no longer required. The old methods were marked as
  Obsolete, so that they aren't used again by mistake.
- On the IChocoalteyGuiCacheService, a new method was added for purging
  the outdated packages.  This needed to be more granular, and only
  delete the file(s) associated with a particular RemoteSource.
- The new PurgeOutdatedPackages takes into account the fact that a
  persisted file is now kept around on a per RemoteSource basis.  This
  was required due to the fact that a package could be outdated from
  more than one RemoteSource, with different package versions.  As such,
  we need to be able to either delete _all_ files when purging, or only
  specific ones.
- New Resource Strings were added to cover some new areas of
  functionality, and a single string was updated to make it clearer
  about what version is being shown.
- Several new discrete message classes were added, and ultimately
  replaced the single PackageChangedMessage.  This was the biggest part
  of the refactoring here, since it proved to be too complicated trying
  to update things based on a single message, with different types.  By
  having a message for each change that can happen to a packge, it
  became much easier to update the necessary portions of the UI when
  things happened.
- The RemoteSourceView was updated to include the information about
  whether a package was outdated or not. This had always been shown when
  using the Grid View layout, but it was never included in the list view
  for the remote source. On top of this, the binding for the list of
  Packages was switched to use an ICollectionView, similar to what is
  done on the LocalSourceView, there was no good reason for having a
  different approach here.
- On the PackageView, an additional TextBlock was added to show the
  Available Version, in addition to essentially the installed version of
  a package, when the package is marked as IsOutdated.
- The RemoteSourceViewModel was updated to record the Source that is
  used when querying for packages, as well as the RemoteVersion that was
  located. This information is very important when processing the update
  messages that are being sent out. It was also found that the
  information about whether a locally installed package was IsPinned or
  not wasn't being added to the PackageViewModel, so this was corrected
  as part of the overall work here.
- In the LocalSrouceViewModel, the handle method for the
  PackageChangedMessage was completely removed, and replaced with
  smaller message handlers, to only deal with the install and uninstall
  methods, which are responsible for adding/removing a package from the
  overall package list.  Important change here is to mark the
  ChocolateySource as null for this ViewModel, so it is clear that these
  are packages on the local computer.
- Several changes in the PackageViewModel...  It was found that some
  methods, Uninstall and Reinstall were available when a package was
  pinned, which isn't allowed.  The Can methods were updated to include
  information about the package IsPinned property. All the
  _eventAggregator.PublishOnUIThreadAsync methods were updated to use
  the smaller messages, rather than the larger PackageChangedMessage
  message, which has beenn deleted. New handle methods were added for
  each of the new small messages, to correctly update the package
  inforamtion when an action was taken. Care was taken to only do this
  when it is known to be required, for example, uninstalling when on the
  LocalSource is not required.  The biggest check here is about only
  marking a package as outdated when it is known to be being shown on
  the RemoteSource associated with where the outdated information is
  coming from.
- In the ChocolateyService, a race condition was discovered, where the
  ChocolateyConfiguration was being overwritten before the intended
  execution could be completed. To guard against this,
  Lock.WriteLockAsync was added before each invocation. This approach
  was already being used in some areas, but not all of them, so the
  decision was taken to added it to all methods.  When storing the
  information about what packages are outdated, a file is now created
  per RemoteSource, and also whether it includes prerelease packages or
  not. The actual call for outdated packages was updated to use the same
  approach that is used in Chocolatey Agent, rather than calling
  UpgradeDryRun.  These are _essentially_ the same thing, but it was
  felt that it is better to keep things consistent across products.  The
  UpdatePackage method was updated to include the version number, which
  now allows the installation of prerelease package versions.
This commit wraps a few more functions with locking for the config file
and removes the unused original lock mechanism.
(#1109) Fix issue on upgrading prerelease packages
Establish foundational UI testing framework for ChocolateyGui by
introducing base test classes and initial test cases for package
version handling. This enables automated testing of the application's
user interface through FlaUI automation.

Key Changes:
- Add ChocolateyGuiTestBase class providing UIA2 automation and
  application startup logic with retry mechanisms
- Create ChocolateyGuiBaseScreen base class for screen object models
  with helper methods for finding UI elements by text
- Implement BetaPackagesTests fixture to verify stable and prerelease
  package version discovery and selection

Reason for the change:
- Establish automated UI testing capability to catch regressions in
  user-facing functionality
- Provide reusable base classes to reduce duplication across future
  UI test implementations
- Enable validation of package version filtering and selection
  workflows
This commit updates the AutomationIds to be in alphabetical order, and
adds new Ids for parts that had been initially missed. It also cleans up
some whitespace.
This updates the ChocolateyGui.UITests project to not build on the WIX
configurations. When running an official build, the WIX build was
building as well.

This also adds a ReleaseOficial build to the UITests project for
consistency with the other projects.
* 1109-flaui:
  (#1109) Update UITests project to not build on WIX
  (#1109) Update AutomationIds and whitespace
  (#1109) Add UI test infrastructure and beta package tests
@corbob corbob requested a review from a team as a code owner May 12, 2026 17:31
@corbob corbob self-assigned this May 12, 2026
@corbob corbob requested review from pauby and st3phhays and removed request for a team and pauby May 12, 2026 17:31
@corbob corbob added the NO RELEASE NOTES Should not be included in the release notes - not enhancing or fixing end product. label May 12, 2026
@corbob corbob added this to the 3.1.0 milestone May 12, 2026

@st3phhays st3phhays left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@st3phhays st3phhays merged commit ada75dc into master May 12, 2026
3 checks passed
@choco-bot

Copy link
Copy Markdown

🎉 This issue has been resolved in version 3.1.0 🎉

The release is available on:

Your GitReleaseManager bot 📦 🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

NO RELEASE NOTES Should not be included in the release notes - not enhancing or fixing end product.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants