One of the top priorities I have when building something is building with the user in mind.
GitHub repo: OMTut/Logi
That’s a nice thing to say, but I keep it as a priority. I try to establish the core responsibility of the app and then shift into usability. If the user has to actively check for and perform updates, that’s not good design (imo). Logi’s update system addresses this by using automated version checking coupled with silent updating. Users do not have to hunt for versions, uninstall outdated ones and install the latest ones. I baked this into Logi’s system.



Automated Version Checking
The backbone of Logi’s updating system is JSON-based version control hosted on GitHub. I wanted to remove the user from the process of checking for updates or hunting for updated version. A JSON file describes the latest version and points to URLs for the latest release as well as release notes. Using this file, Logi determines if an update is available and separates updates into two categories based off a Boolean: optional and required.
For optional updates, Logi displays a dismissible banner informing the user that an update is available. It allows the user to start with the process directly from the banner instead of dismissing the banner and being funneled into the system configuration screen. Similarly, Logi displays a banner for required updates as an alert. The content area of the app is hidden. There is no interaction available with the exception of activating the update process.
Silent Update
Once the user initiates an update, Logi downloads the installer to a temp directory, runs it in the background, exits the currently running app, installs the new version in the same directory, and relaunches the updated app. A progress bar keeps the user aware that the update is happening, and I’ve integrated the release notes through a direct link to the release page.
Future Improvements
I’m still learning Qt and Inno (the installer). When Qt builds Logi, a lot of dependencies are bundled and shipped. Are they all necessary? Are there build optimizations I can do? I’m learning. Likewise, there are visual improvements I want to make with the installer. The progress bar is functional and serves the user, but it can be improved. However, there is one improvement I’m looking forward to implement: CI/CD.
Currently Logi deployments are manual. I build the app in Qt. I run a test scripts. I run a script I created to prepare for release that validates that the build is the latest (cause I’ve accidently released a mislabeled old build! I’m learning.), deploys the dependencies using windeployqt, and verifies final output. After the script verifies the output, I manually create the new release tags and upload the exe to GitHub.
Let’s automate that. Let’s explore GitHub actions a little more and see what the potential is to build, test, and release through their workflow. I already have a GitHub actions workflow implemented for Logi’s landing page. It automatically builds and deploys to AWS. Maybe there’s an opportunity here for the app itself.