Skip to content
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

feat: cont'd windows installer refinements #603

Merged
merged 3 commits into from
Dec 7, 2024

Conversation

homandr
Copy link
Contributor

@homandr homandr commented Dec 6, 2024

  • Installer is now versioned - both file name and UI.
  • Downgrade is now possible without having to uninstall and install from scratch.
  • Clearly indicate whether it is an upgrade, reinstall, or downgrade.
  • Remember components page selection from previous installation and honour user deselection of previously selected items.
  • Disable installation folder selection for upgrade/reinstall/downgrade scenarios.
  • Instead of scaring users with the port information, check listening ports and present the relevant information in case of a conflict.
  • Refuse installation with conflicting port, which would result in a non-functioning application anyway.
  • Removed PowerShell dependency by switching to native commands.
  • Fixed the process termination function where it would not terminate the main backrest.exe process forcefully (just the backrest-windows-tray.exe) after all graceful attempts failed.
  • Disable "Open Backrest UI" checkbox if "Start Backrest" is unchecked on the finish page as it wouldn't make sense otherwise.
  • Start Menu shortcuts are now part of core installation, not deselectable (simplifies installation experience).

* Installer is now versioned - both file name and UI.
* Downgrade is now possible without having to uninstall and install from scratch.
* Clearly indicate whether it is an upgrade, reinstall, or downgrade.
* Remember components page selection from previous installation and honour user deselection of previously selected items.
* Disable installation folder selection for upgrade/reinstall/downgrade scenarios.
* Instead of scaring users with the port information, check listening ports and present the relevant information in case of a conflict.
* Refuse installation with conflicting port, which would result in a non-functioning application anyway.
* Removed PowerShell dependency by switching to native commands.
* Fixed the process termination function where it would not terminate the main backrest.exe process forcefully (just the backrest-windows-tray.exe) after all graceful attempts failed.
* Disable "Open Backrest UI" checkbox if "Start Backrest" is unchecked on the finish page as it wouldn't make sense otherwise.
* Start Menu shortcuts are now part of core installation, not deselectable (simplifies installation experience).
@homandr homandr changed the title Many improvements, especially around upgrade experience Installer improvements, especially around upgrade experience Dec 6, 2024
@garethgeorge
Copy link
Owner

Thanks for taking more time to refine this, the first round of improvements is already a really nice upgrade for the windows UX. I also think that with the version properly embedded we should be able to package backrest for winget now -- I'll go ahead and update the related bug.

Improving the documentation and flow around custom ports was on my todo list, you've beaten me to it and it's a nice touch. I agree that the "always present" warning was potentially alarming for first time users who aren't interested in using backrest with multiple accounts.

The improved "new install" vs "upgrade" vs "uninstall" flows also look to be a really nice touch.

@garethgeorge
Copy link
Owner

garethgeorge commented Dec 6, 2024

Looking at the build snapshot release workflow, I think I'm seeing a failure due to embedding the version name in the installer binary. I think that may make it more difficult for automation that searches for a release of a specific name (e.g. trying to auto update and apply the installer perhaps?). The released artifacts are hard coded in a few places.

https://github.com/garethgeorge/backrest/blob/main/.github/workflows/release.yml#L84-L90

and

https://github.com/garethgeorge/backrest/blob/main/scripts/generate-installers.sh#L1-L20

@garethgeorge garethgeorge changed the title Installer improvements, especially around upgrade experience feat: cont'd windows installer refinements Dec 6, 2024
* Support passing architecture via NSIS parameter. E.g.
docker run -v $(pwd):/build binfalse/nsis -DARCH=arm64 install.nsi
* Use Unicode since ANSI is deprecated
@homandr
Copy link
Contributor Author

homandr commented Dec 6, 2024

I think it would be very beneficial to include release version in the filenames for all assets, not just Windows installers. I'm not familiar with Github workflows but see that many other projects have the version. Not sure how they do it.

Regarding Windows installer, probably the easiest would be to pass the architecture to NSIS compiler instead doing the copy/rename. I just added this option. So, you can use this in https://github.com/garethgeorge/backrest/blob/main/scripts/generate-installers.sh#L16:

    docker run --rm -v $(pwd):/build binfalse/nsis -DARCH="$arch" install.nsi
else
    docker run --rm -e TARGET_ARCH=arm64 -v $(pwd):/build binfalse/nsis -DARCH="$arch" install.nsi

And take out https://github.com/garethgeorge/backrest/blob/main/scripts/generate-installers.sh#L19

Couldn't you then use this for https://github.com/garethgeorge/backrest/blob/main/.github/workflows/release.yml#L88-L90?

        with:
          files: |
            ./dist-installers/Backrest*-setup-x86_64.exe
            ./dist-installers/Backrest*-setup-arm64.exe

Or possibly just Backrest*.exe.

If you don't want to have the version in the filename, you can just take out ${VERSION} from the OutFile directives. It has no impact on anything other than the filename.

@garethgeorge
Copy link
Owner

garethgeorge commented Dec 6, 2024

snip: saw your rational after replying, and digging a bit more it looks like restic is including versions in it's artifact names. I can see the UX value of including the version in the download and it would be good for backrest to match that.

We can do this for backrest, but it needs a bit of thought as I feel I should make all of the release artifacts consistent.

Overall LGTM, I'll hold off on merging until I can make those improvements to the release pipeline this weekend :)

@homandr
Copy link
Contributor Author

homandr commented Dec 6, 2024

Understood. I added another commit to take out the version. Passing the arch is still possible.

@garethgeorge
Copy link
Owner

sgtm! Passing the arch is an improvement. Rerunning the workflow, thanks!

@garethgeorge garethgeorge merged commit b1b7fb9 into garethgeorge:main Dec 7, 2024
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants