Merged
Conversation
Contributor
There was a problem hiding this comment.
Pull request overview
This PR updates CI caching and refines macOS system extension state/reconciliation behavior to reduce unnecessary “reboot required” states and better represent “unknown” extension status before it’s determined.
Changes:
- Simplifies GitHub Actions caching by removing
.dart_toolfrom cache paths and standardizing on~/.pub-cache. - Updates macOS extension state initialization to default to
unknownand adjusts UI gating/visibility around that state. - Refines macOS system extension reconciliation to allow normal upgrade/content-change handling when an enabled extension is uninstalling but differs from the bundled copy, and updates tests accordingly.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| macos/Runner/VPN/SystemExtensionManager.swift | Adjusts reconciliation flow to avoid blocking on reboot for certain uninstalling/mismatch scenarios. |
| macos/RunnerTests/RunnerTests.swift | Updates test expectations to validate content-change reconciliation behavior instead of reboot requirement. |
| lib/features/vpn/vpn_status.dart | Changes default extension state to unknown and adds unknown-specific gating logic. |
| lib/features/macos_extension/provider/macos_extension_notifier.dart | Initializes provider state to unknown instead of notInstalled. |
| lib/features/macos_extension/macos_extension_dialog.dart | Removes non-error status message rendering from the dialog UI. |
| .github/workflows/build-android.yml | Removes .dart_tool from cache paths. |
| .github/workflows/build-linux.yml | Removes .dart_tool from cache paths. |
| .github/workflows/build-macos.yml | Removes .dart_tool from cache paths and trims restore-key formatting. |
| .github/workflows/build-windows.yml | Removes .dart_tool from cache paths. |
| .github/workflows/build-ios.yml | Switches cache path to ~/.pub-cache (and now differs slightly in formatting vs. others). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
jigar-f
commented
Apr 10, 2026
| action: .activate(reason: "activate bundled extension while old version awaits removal"), | ||
| change: .install) | ||
| } | ||
| return SystemExtensionReconciliation( |
Contributor
Author
There was a problem hiding this comment.
This is the main change
myleshorton
approved these changes
Apr 10, 2026
garmr-ulfr
pushed a commit
that referenced
this pull request
Apr 14, 2026
* if system extension is in uninstall state do not block new installtion. * update macos system extension test * do not cache dart_tool * Set the default status as unknown. * code review updates
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request includes several changes across CI workflows, macOS extension state management, and the system extension reconciliation logic. The main goals are to streamline caching in CI, improve the accuracy of macOS extension status handling, and refine the logic for reconciling system extension states, especially when dealing with uninstalling extensions.
CI Workflow Improvements:
.dart_toolfrom the cache paths in all workflow files (build-android.yml,build-linux.yml,build-macos.yml,build-windows.yml) and ensured only~/.pub-cacheis cached, which should reduce cache size and avoid unnecessary cache invalidation. ([[1]](https://github.com/getlantern/lantern/pull/8637/files#diff-990269d44b14b14a290b6d577fde890babb7b7f98e88f9e33753db2d5fca4570L47),[[2]](https://github.com/getlantern/lantern/pull/8637/files#diff-990269d44b14b14a290b6d577fde890babb7b7f98e88f9e33753db2d5fca4570L104),[[3]](https://github.com/getlantern/lantern/pull/8637/files#diff-bfc3aeacfea5c320a79818465fb6d4b9901e2c1fc26af712702cae54db219bdcL56),[[4]](https://github.com/getlantern/lantern/pull/8637/files#diff-a1654f4357833dfc4d0c6a8d39c2e3ee30ceea604c29238846903993434ab384L49),[[5]](https://github.com/getlantern/lantern/pull/8637/files#diff-01d393d5fc96ff0e19c736f6b445df76a62887b81071928a950e936379746f2dL58))build-ios.yml, replaced.dart_toolwith~/.pub-cachein the cache path for consistency with other platforms. ([.github/workflows/build-ios.ymlL55-R55](https://github.com/getlantern/lantern/pull/8637/files#diff-c75570ad4e0fdfe6f209247388e447fb5bcca0d45461735d9211e0f971beb406L55-R55))macOS Extension State Management:
MacOSExtensionStatefromnotInstalledtounknownto better reflect the initial state before status is determined. ([[1]](https://github.com/getlantern/lantern/pull/8637/files#diff-775ff7db23dca67ed061eed2e38459a20aadd0324ed9c259665c0b262ec59617L25-R25),[[2]](https://github.com/getlantern/lantern/pull/8637/files#diff-03faae1021be7e1189ff7cefc9374af69a34ec9c16e8da99f29922389f974b9fL21-R21))VpnStatusto treat theunknownstatus as not ready and to prevent certain UI actions if the extension status is unknown. ([lib/features/vpn/vpn_status.dartR78-R80](https://github.com/getlantern/lantern/pull/8637/files#diff-03faae1021be7e1189ff7cefc9374af69a34ec9c16e8da99f29922389f974b9fR78-R80))MacOSExtensionDialogUI for a cleaner user experience. ([lib/features/macos_extension/macos_extension_dialog.dartL82-L95](https://github.com/getlantern/lantern/pull/8637/files#diff-805a5ba0a3facf797739dc375d663ba01257478e0011c6eca6ae90a8a2284a7dL82-L95))System Extension Reconciliation Logic:
SystemExtensionManager.swiftto handle cases where an enabled extension is uninstalling but its contents differ from the bundled version, allowing normal upgrade/content-change handling instead of blocking on a reboot. ([macos/Runner/VPN/SystemExtensionManager.swiftL578-R578](https://github.com/getlantern/lantern/pull/8637/files#diff-3c337cbd9892c03a95394ca9b8a870b55b1a83c5925c0ecc0c7f8042620f2ca2L578-R578))[[1]](https://github.com/getlantern/lantern/pull/8637/files#diff-c8d0858157e18aeeae5bca9ab00aa55061c93d358aa6e9b85f106e6186e3c91dL183-R183),[[2]](https://github.com/getlantern/lantern/pull/8637/files#diff-c8d0858157e18aeeae5bca9ab00aa55061c93d358aa6e9b85f106e6186e3c91dL197-L201))