Development Blog #305
Replies: 21 comments
-
Let's address the elephant in the room: The The primary reason for this, has been a massive rework of the underlying CI/CD process. This was done on a separate repository as fiddling around with GH actions and npm/docker releases would have messed up this project. I started this work early April and after a busy personal schedule was able to finalise it in June/July (this is also when the first nightly and beta releases appeared. This is setting this project up for long-term maintainability and is fully automating the build, test and release process, as every push now leads to a build (sometimes test) and release run of the code. This is achieved by implementing Conventional Commits in combination with semantic release. Following this, I started thinking about contribution and feedback processes a lot and created assets to support and streamline these processes. All of this is documented in a Contribution Guideline and reflected in various templates. Unfortunately none if this is 'live' yet - as I have not been happy to publicly release the next version of the tool (and therefore could not push to |
Beta Was this translation helpful? Give feedback.
-
As this project is leaving its infant status, there are currently a lot of architectural changes going on. Unfortunately none of them lead to very exciting user facing changes short term, but should help out the project in the long run. This includes:
Overall a lot going on - and really wanting to push out the public release so My plan is to finalise the |
Beta Was this translation helpful? Give feedback.
-
I think I've removed all dangling references, that were introduced due to the central event hub. I've introduced an event registry to keep track of listeners held by any class to easily remove them once a scheduled run has been completed. The har tracker and header jar core functionality should be implemented now as well. As part of that I am removing some restrictions around when to retry a failed sync. Locking at the unhandled errors reported so far, I believe this is fair. Also on a retry, I will not reset the iCloud Session, but only perform a 'stupid' resync. I'm hoping this will make initial syncs or large libraries more stable. I will try to resync my own library to ensure this is working, but I'll need to rely on more heavy iCloud Photos users to provide feedback here. |
Beta Was this translation helpful? Give feedback.
-
The header jar and network tracker have been implemented and it seems to work. Additionally the work around ensuring no memory leaks happen because of old object being referenced in event listeners has been concluded, by introducing an EventRegistry. The header jar might fix the annoying login warning emails. All of this has been released with v1.2.0-nightly.4 - let's see if any of it works while if fix all the broken tests... If this works well 'in production' for a few days, I will try and re-sync my full library to check that this also works well. Then, the only thing missing for now would be the region flag. |
Beta Was this translation helpful? Give feedback.
-
Nightly run showed, that the HAR tracker does not seem to be compatible with Let's see if |
Beta Was this translation helpful? Give feedback.
-
The good news is, that it seems The current The |
Beta Was this translation helpful? Give feedback.
-
One of the things that is really annoying is the library lock :D Unfortunately it is very much necessary, however I'm already thinking how I can enable releasing the lock gracefully upon an error. I'm thinking about moving the locking logic into the This could be a future extension of the network manager, where I move queue handling & throttling into there. |
Beta Was this translation helpful? Give feedback.
-
I believe the memory leak situation is finally under control - I'm going into a feature freeze now, finalise the unit tests and then target to release 1.2.0 by early next week (if I'm not running into any more trouble) |
Beta Was this translation helpful? Give feedback.
-
Memory leakage still not under control - app grows in size of about 15MB for every sync run on my personal account. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
I've had a thought about the future implementation of Album syncing and how to make this more reliable. I've went down a rabbit hole how rsync is implemented and tree edit distances. Only to come to the conclusion that this is all way too much for this project. I've discovered a recursive diff implementation that should fit this use case well. I'm now thinking about an asset level archiving feature. However this would need a full rewrite of everything. As I move towards incorporating this algorithm and re-implementing the asset parsing, I should keep this idea in mind. |
Beta Was this translation helpful? Give feedback.
-
I've been busy making some quality of life improvements to the tool - this includes summarized warnings, as well as a new crash reporting system. As part of that I'm trying to understand (and hopefully improve) reliability of the overall sync process. It seems, that after 60 minutes the asset URL expire (which requires a re-setup of iCloud Photos) and after 8 hours the session token seems to expire (so we would need to sign in again). In this case, the Additionally feedback on All of this is now on the agenda for the final release, together with a review of the docs and comments. |
Beta Was this translation helpful? Give feedback.
-
Refreshing of session id has been implemented - will only take 8 hours to validate - let's see if we can get a nice full library sync of my personal library. |
Beta Was this translation helpful? Give feedback.
-
The sync refreshed the session and continued the process - looking good so far! |
Beta Was this translation helpful? Give feedback.
-
As I'm currently primarily focusing on cleaning things up and making sure the docs are up to date, I've been coming back to the idea of increasing the level of automation for acquiring a new trust token for the API tests. The MFA code is already received via a cellular modem attached to one of my machines and processed by the OS - which is why it should not be too hard to automatically forward it to the GH action needing it. I've been thinking the following approach:
A problem for another day - first get a release out :) |
Beta Was this translation helpful? Give feedback.
-
I've cleaned up the docs and even though test coverage is not there yet (I'm still lacking the |
Beta Was this translation helpful? Give feedback.
-
I was just talking about reworking the trust acquisition workflow - and just now the trust token is required and it seems upterm is not available - will have to wait another day. |
Beta Was this translation helpful? Give feedback.
-
upterm.dev stopped working at the worst possible time, as the lack of trust token is currently blocking the release :( I could not get the workflow working, because wireguard does not seem to be able to connect to the runner - maybe a port issue? I'll be on vacation for the next two weeks - this will therefore delay everything. For now the latest nightly release is basically the next full release - at least this way it will be battle proof, by running unattended the next two weeks. |
Beta Was this translation helpful? Give feedback.
-
This was significantly more difficult to get working than expected - but finally I was able to connect ot the GH actions runner through wireguard updating the trust token. This finally unblocks deployments! |
Beta Was this translation helpful? Give feedback.
-
I've addressed some last minute issues that popped up while I've let the tool run for 2 weeks with constant new pictures flowing in - I'm very happy with the results and have now triggered the new release workflow for the first time. Fingers crossed.... |
Beta Was this translation helpful? Give feedback.
-
Deployment went nearly flawless - unfortunately due to its size, I ran into GH's API limit - need to manually clean up some tags, issues and PRs, but overall very happy - onto the next version! |
Beta Was this translation helpful? Give feedback.
-
In short, this project started, because I was looking for a reliable solution to keep a backup of my iCloud Photos library (full motivation here) and I never thought to get to a working solution nor was I expecting other people to be interested in a project like this.
However as interest in this project has grown and given this is passion project of mine, I want to transparently provide updates on the work that I am doing.
Especially since this is (currently) maintained solely by myself in my free time, progress might sometimes appear slow and sometimes actually be slow. I'm therefore going to try and keep this discussion thread up to date with the work I'm putting into the project.
I'm hoping this will build trust in the community about my commitment to the tool, while also helping me to keep track of my thoughts, when there will be inevitable times of inactivity (because of life).
I am not sure if this will be of interest for anyone but me, but this project has already proven me wrong once. I therefore hope you'll enjoy this - and please provide me with feedback in case I can make this valuable to you!
Beta Was this translation helpful? Give feedback.
All reactions