TedLawson's Blog

Week 16 and 17 Review

TedLawson
Published: 09/25/2023

Accomplishments:

The last two weeks I had been interviewing for a job with Apple, and I got the position! This process took some of my time away, however I communicated this with my mentor, Manu, and also had some smaller wins in this time. First, I got two PR's merged. One was the PR that fixed an issue I discovered during my test coverage project: an issue with the Archive action buttons and the context menu buttons not being in sync, allowing for users to delete multiple archives at the same time. I outlined the bug here, and my PR that fixed the bug can be found here. Another PR I got merged in addressed a different issue I found during my testing coverage project, an issue in which users were able to do in-line renaming of archives while a background action was occurring, leading to various issues. This issue can be found here, and the PR I made to correct the issue can be found here. In addition to these PR's I also made various improvements to the SSH box PR, and continued work on the Profile Sidebar project

 

This week I had a productive meeting with Manu, where we discussed the current open PR's and the progress needed to get them to a place of merging. For the profile sidebar, we discussed some adjustments that can be made to the profile options buttons as well as the misc button. We also discussed the remaining work on the test suite improvements and SSH Box PR.


Challenges: 

The biggest challenges I faced this week were balancing my interview prep time and GSoC work. Now that I got the job offer and have completed all on-boarding work relating to the job, I can focus on the GSoC projects remaining before my start date in a couple of weeks.

The week ahead:

The week ahead will be a big one - I plan to complete all the currently open PR's and finish up the test suite project. If all goes to plan, I could even finish up the profile sidebar project, however that will likely spill into the next week or two. Once these projects are complete, I will be able to put the finish touches on the GSoC work and begin compiling things for my final submission.

View Blog Post

Week 15 Review

TedLawson
Published: 09/14/2023

Accomplishments:

This week I made headwinds into the Profile Sidebar project. Specifically, I implemented the profile selector into a sidebar, removed the old profile selector GUI elements, updated the profile add/delete buttons to be separate and right aligned from the profile import/rename buttons. Additionally, I created a new "Misc" button that sits below the profile selector in the sidebar. This button opens a new interface I created that houses universal application options such as "settings" and "about". It will also eventually house a "repository management" tab, however that will be implemented in a separate PR. The idea behind these changes is to separate out the profile specific interface "archives, sources, repository, schedule" from the universal items "settings, about, repository management".

Challenges:

I had never before created a ".ui" file. so this was challenging to figure out for the first time. I was able to reuse the misc_tab ui page for the new settings tab, however I created the "about" tab UI from scratch. I used the other .ui files as reference and put the about tab together in a way that looks clean and formatted well.

The week ahead:

This week I am going to put the finishing touches on the "about" tab and begin working on the "repository management" tab (which will be a separate PR). Also, I have a few PRs open for bugs that I discovered while testing Vorta, and I will continue to work on these until they are in a position to get merged into master. 
 

View Blog Post

Week 14 Review

TedLawson
Published: 09/05/2023

Accomplishments:

This week, I worked with my mentor and other project contributors to finalize a design for the profile sidebar. Additionally, I identified 3 bugs while testing Vorta this week. For each bug I discovered, I filed a bug report outlining the issue which included a brief description, a video screen capture of the bug, steps to reproduce, as well as relevant environment variables and log outputs. I also created PR's for each of these bugs that address the issues discovered and corrects them. Here are the bugs I discovered while testing, and the PR's I created to address them:

1. The archive tab has buttons for "mount" "delete" "rename" etc, and when background actions are occurring these buttons get disabled. These actions are also available in a context menu when a user right-clicks on an archive. I discovered that the archive buttons and the context menu buttons are not disabled in sync, meaning that sometimes actions are left available in the context menu when they should be disabled due to a background operation in progress. This could lead to issues such as operations being queued for archives that have since been modified or deleted, and causes failures. To address this, I bound the toggle state of the archive tab buttons to those of the context menu buttons, such that they will always be enabled or disabled in sync. This PR can be found here: https://github.com/borgbase/vorta/pull/1793

2. Similar to the previous issue, I found that the new "in-line rename" feature is left available even during a background operation. If a user renamed an archive during a background operation, it leads to visual bugs where, in some cases, all archives get deleted. In other cases, all archives get renamed to the newly entered name. To address this issue, I added a check in the method that handles the in-line renaming to only function when the rename button is enabled. This adds consistency to the rename behavior, and avoids the visual bugs that could be caused. My PR for this issue can be found here: https://github.com/borgbase/vorta/pull/1791

3. One final issue I discovered while testing had to do with the SSH Key combobox. I was testing the "add ssh key" feature when I discovered newly added keys were not populating in the box until after Vorta restarts. I found this had to do with the 'add ssh key' dialogue box not closing when the user clicks 'generate'. Instead, the box stays open to inform the user the key has been generated, and then the user has to click 'cancel' to close the box. To fix this issue, and make the behavior similar to other interactions with the SSH options, I added functionality that lets the 'add ssh key' box close after the user generates a new key, and displays the success or failure text in a message box, similar to success and failure message when the user copied ssh keys to clip board. This PR can be found here: https://github.com/borgbase/vorta/pull/1802

Challenges:

This week I faced interface design challenges. Having spent most of my time in the test suite, I am less familiar with how to implement UI changes that integrate well with the rest of the application. YF-projects had good advice for me: 

1. Recognizable patterns repeated throughout the application usually improve the UX

2. Try to avoid cluttering the inference 

His advice helped me decide how to order the buttons/context menu actions in the archive tab. He and Manu also offered advice on the profile sidebar, and we now have a good idea of what it will look like such that I can get started on that project.

The week ahead:

This week I am going to focus my time on the profile sidebar project. My goal is to get the profile sidebar GUI elements created, and the old sidebar elements removed. From there, I will begin working on adding functionality to the elements.

View Blog Post

Week 13 Review

TedLawson
Published: 08/29/2023

Accomplishments:

This week I communicated with my mentor Manu that I was fielding a couple of job interviews, and as a result I was not able to accomplish as much as I normally would in a given week. That being said, I did have a couple of wins worth mentioning. Starting off, I was able to get the reduced test workflow PR merged into master last week. This has worked well in practice, and significantly reduces the number of jobs done on each push/PR. Specifically, push/pull requests now run a total of 11 checks, compared to the previous 39 that were occurring before. Push/Pull requests to master branch have had the comprehensive set of checks left in place, and the workflow I edited also leaves in place the ability to run a manual comprehensive check at any time. The result here has been that most triggers (normal push/pull requests to a branch other than master) run a thorough set of tests, they are no longer timing out, and the resource use/execution time has been reduced. 

This week I also created a PR for the final bits and pieces of the test suite revisions. I have created a few more tests, increased coverage from 77% to 79%, and generally "cleaned up" where I could. 

Challenges:

This week I did not face any challenges. Mostly due to the reduced workload as I focused a majority of my time on interview prep, as communicated with my mentor.

The Week Ahead:

In the week ahead, I have some additional interview prep that I have communicated with Manu. I am ready to begin working on the next project, which involves moving the profile selector and tab widget to a sidebar, and generally rethinking the main window interface. I will create a FR and mockups to brainstorm ideas and receive feedback from the community before beginning work in earnest.

View Blog Post

Week 12 Review

TedLawson
Published: 08/21/2023

Accomplishments:

This week I had 6 PRs merged into master. These PR's covered the majority of the unit test folder revisions, and included:

  • Reducing code duplication by implementing pytest fixtures for common test setup/teardown
  • Reducing code duplication and improve readability through the use of test parametrization
  • Increased total codebase test coverage from 72% to 78% (so far - more to come!) by adding creating additional unit tests
  • Wrote additional docstrings to improve readability and help future contributors understand each test

Challenges:

In addition to getting these PR's merged in, I also began working on a side project which was brought to my attention by my mentor Manu. He mentioned that currently, our GitHub automated workflow is set up to run integration and unit tests on too large a matrix of [python versions X os's X Borg versions], resulting in a 39 jobs created for each push and pull request action. He tasked me with reducing this workflow by creating different matrices based on the type of job. Specifically, he requested shorter runs for Push or PR, and full runs for manual workflow dispatchs or a push to Master. I had never worked with yaml files before, so this was something new for me, but I stepped up to the task and learned a lot in the process. The main challenge I faced was getting a matrix defined dynamically as opposed to staticly. In its current form, the metric was assigned in the yaml file and was the same for all actions (push, PR, workflow dispatch). My challenge was to instead create the matrix dynamically based on the type of action. I best approach I found to doing this was to create a script that would generate the matrix and write it to a json file, which the yaml file would then store in an environment variable "GITHUB_OUTPUT" for future jobs to reference. I had two main struggles along the way:

  1. Deprecation warnings: Originally, I was setting the matrices using `::set-output`, however I received a warning from GitHub that this method was getting a deprecation warning from GitHub and needed to change my approach. After reading the GitHub documentation on this issue, I discovered there was a new "GITHUB_OUTPUT" environment file available, and using this was the new best practice. 
  2. In the integration test matrix, we exclude Borg version 2.0.0b5 with python v3.8 because it isn't supported. This was challenging at first because I was not sure how to define this when I was creating matrices dynamically vs statically. I tried several different approaches, including one where I created a step in the `test_integration` job that checked if the combination was invalid and, if so, would skip the rest of the steps. This approach, however, was somewhat clunky, and one of the project maintainers recommended defineing the exclude within the script that creates the matrices. In hindsight this seemed like the obvious approach, however I think I was hung up on trying to do the exclude within the `test_integration` job, which is where the original exclude was defined. With this new approach of adding the exlclude to the matrix within the script, everything worked as intended and I marked the PR as 'ready for review'.


The Week Ahead:

With these PRs merged in, the unit tests folder is almost complete, with some work left in the Misc tests and treemodel. After this I will move into integration tests and finish up the Testsuite Improvements project.

View Blog Post