* fix: make tests pass on Windows
* Run ci on all supported building OSes
* Add os name to CI step
* Build rust crates on all oses
* tweak
* Only run rust on multiple oses for now
* chore: add cspell checking and make pass
* chore(shorebird_code_push): minor improvements to example (#242)
* chore(shorebird_code_push): v2.0.2 (#243)
* chore: fix cspell
---------
Co-authored-by: Felix Angelov <felix@shorebird.dev>
* feat(shorebird_code_push): track support
* cleanup and add todos
* docs
* run ffigen
* use c_char instead of char
* Add channel support
* tests
* tests
* update podfile.lock
* Update example to include tracks selector
---------
Co-authored-by: Bryan Oltman <bryan@shorebird.dev>
Co-authored-by: Bryan Oltman <bryanoltman@gmail.com>
* fix: don't return true from isNewPatchAvailableForDownload if the new patch will not be installed
* fix: update current_boot_patch to always return currently running patch
* add C api tests
* add extra test check
* feat: add rollback support
* Cleanup
* add test
* docs and cleanup
* log full PatchCheckResponse
* remove unnecessary file permission spec from test helper
* report launch failure when a patch was in the process of booting on app start
* refactor: extract shared fake patch test logic into function
* cleanup
* remove commented-out code
* cleanup
* Cleanup
* cleanup
* rename
* update comments
* add todo
* remove added logs
* update comments
* make patch_event a proper constructor
* Split with_mut_state out from with_state
* update comment
* feat: track known_bad_patches instead of highest_seen_patch to support rollbacks (#191)
* feat: track known_bad_patches instead of highest_seen_patch to support rollbacks
* docs
* do not send patch number, do not install already installed patches
* remove patch number from PatchCheckRequest
* tests
* more tests
* fix merge issues
* fix: track patches while they are booting
* update comment
* update comment
* add test
* refactor: only check whether a patch failed to boot on initialization
* fix test
* fix: track patches while they are booting
* update comment
* update comment
* add test
* only init UpdaterState if set_config succeeds
* pr feedback
* cleanup
* pr feedback
* add todo referencing github bug re: patch install failure events
* document lifetime of currently_booting_patch
* more details about on_init lifetime
* add todo re: validation
* update test comments
* update test to regenerate patch manager when simulating a fresh start
* Introduce InitError for better testing
* fix test
* add extra assert in PatchManager on_init_tests
* Add test to demonstrate hang when attempting to init while waiting for a patch check request
* Fix thread contention when initing during patch check
* Clean up test
* revert change to fake_yaml
* reorg
* lower timeout in test
* fix: verify failed patch is next_boot_patch before clearing
* add record_boot_start_for_patch now that it exists
* fix: delete all old patch artifacts on successful boot
* add comment
* additional docs on delete_patch_artifacts_older_than
* update comments
* delete unrecognized patch subdirectories
* error logging
* fix: verify failed patch is next_boot_patch before clearing
* add record_boot_start_for_patch now that it exists
* add comment
* add comments
* cleanup
We added client_id back when we had a different billing model
where we would bill customers based on number of unique devices
accepting an install in a given month (similar to what expo.dev
advertised as their pricing model at the time).
We moved to a differnet pricing model and never used client_id
so removing it.