Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
bfc2c72
feat: add archive-based installation support
leoafarias Nov 5, 2025
c3d2531
fix: code review fixes for archive-based installation
leoafarias Nov 24, 2025
d60ce39
refactor: extract error cleanup helper and add ArchiveService tests
leoafarias Dec 3, 2025
24addd6
Add archive archive tests and preserve useArchive on retry
leoafarias Dec 5, 2025
4aa8b72
fix: handle bare git cache in updateLocalMirror
leoafarias Dec 15, 2025
2242af4
Fix CI: use Dart 3.8 for release tool and clean analyzer
leoafarias Dec 15, 2025
41d7cb7
Remove non-behavioral archive service tests
leoafarias Dec 22, 2025
17ecc01
fix: remove orphaned FileLocker references from git_service.dart
leoafarias Feb 2, 2026
55210ac
fix: enforce archive release channel qualifier behavior
leoafarias Feb 10, 2026
a97578f
chore: resolve dcm findings in cache and git workflows
leoafarias Feb 10, 2026
5591e73
fix: harden archive install with staging directory and network resili…
leoafarias Feb 10, 2026
c7c1bc0
chore: retrigger vercel deployment
leoafarias Feb 12, 2026
5e14a71
Harden archive install finalization and align archive validation tests
leoafarias Feb 12, 2026
69f3e08
ci: add archive regression agent workflow
leoafarias Feb 13, 2026
d5184c3
docs: pin next-mdx-remote to v6
leoafarias Feb 13, 2026
891c044
Merge origin/main into issue-688-relink
leoafarias Feb 20, 2026
801ad03
chore: standardize CI sdk fallback and add git mirror tests
leoafarias Feb 20, 2026
034386d
chore: remove code review note document
leoafarias Mar 3, 2026
45e1094
refactor: simplify archive service and reduce test duplication
leoafarias Mar 3, 2026
1c47770
fix: harden archive install recovery and expand test coverage
leoafarias Mar 4, 2026
1b1b228
chore: remove local regression agent and workspace .fvmrc
leoafarias Mar 4, 2026
5a376ee
Merge branch 'main' into issue-688-relink
leoafarias Mar 4, 2026
067683b
refactor: improve archive service clarity and test maintainability
leoafarias Mar 4, 2026
44fc6a2
Merge origin/main into issue-688-relink
leoafarias Mar 5, 2026
5684462
refactor: harden service operations, improve cleanup and validation
leoafarias Mar 5, 2026
cf9669f
refactor: consolidate lock lifecycle in GitService and remove noise c…
leoafarias Mar 5, 2026
9b70297
refactor: harden cache listing, git URL validation, and CI mirror def…
leoafarias Mar 6, 2026
bbbb69d
revert validation rules to match main
leoafarias Mar 6, 2026
44e382e
format fvm package
leoafarias Mar 6, 2026
9e64a4c
Merge remote-tracking branch 'origin/main' into issue-688-relink
leoafarias Mar 6, 2026
2858536
chore: strip drift and keep archive install changes only
leoafarias Mar 6, 2026
eb00163
fix: pre-seed shared test git cache in CI to prevent clone timeouts
leoafarias Mar 6, 2026
9f97094
fix: revert CI pre-seed workaround, bump test-os timeout, remove redu…
leoafarias Mar 6, 2026
0f7479e
fix: handle Windows PowerShell args in archive test helpers
leoafarias Mar 6, 2026
fdc8b42
chore: set 20-minute timeout on all CI test jobs
leoafarias Mar 11, 2026
51e6e4b
fix: bump CI timeouts to account for setup overhead
leoafarias Mar 14, 2026
ae2818a
fix archive install workflow and test cleanup
leoafarias Mar 14, 2026
96f29e9
Fix DCM CI failures
leoafarias Mar 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -211,7 +211,7 @@ jobs:
migration-test:
name: Migration Test on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
timeout-minutes: 60
timeout-minutes: 45

strategy:
fail-fast: true
Expand Down
1 change: 1 addition & 0 deletions fvm_mcp/lib/src/process_runner.dart
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class ProcessRunner {
return [exe, ...args]
.map((part) {
final escaped = part.replaceAll('"', r'\"');

return escaped.contains(' ') ? '"$escaped"' : escaped;
})
.join(' ');
Expand Down
20 changes: 17 additions & 3 deletions lib/src/commands/install_command.dart
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,20 @@ class InstallCommand extends BaseFvmCommand {
help: 'Skip resolving dependencies after switching Flutter SDK',
defaultsTo: false,
negatable: false,
)
..addFlag(
'archive',
help: 'Install from a precompiled archive instead of cloning from git',
defaultsTo: false,
negatable: false,
);
}

@override
Future<int> run() async {
final setup = boolArg('setup');
final skipPubGet = boolArg('skip-pub-get');
final useArchive = boolArg('archive');

final ensureCache = EnsureCacheWorkflow(context);
final useVersion = UseVersionWorkflow(context);
Expand All @@ -63,8 +70,11 @@ class InstallCommand extends BaseFvmCommand {
// Apply fork/ref ambiguity resolution to project-pinned versions
final resolvedVersion = validateFlutterVersion(version.nameWithAlias);

final cacheVersion =
await ensureCache(resolvedVersion, shouldInstall: true);
final cacheVersion = await ensureCache(
resolvedVersion,
shouldInstall: true,
useArchive: useArchive,
);

await useVersion(
version: cacheVersion,
Expand All @@ -80,7 +90,11 @@ class InstallCommand extends BaseFvmCommand {

final flutterVersion = validateFlutterVersion(version);

final cacheVersion = await ensureCache(flutterVersion, shouldInstall: true);
final cacheVersion = await ensureCache(
flutterVersion,
shouldInstall: true,
useArchive: useArchive,
);

if (setup) {
await setupFlutter(cacheVersion);
Expand Down
13 changes: 12 additions & 1 deletion lib/src/commands/use_command.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,12 @@ class UseCommand extends BaseFvmCommand {
abbr: 's',
help: 'Skips downloading SDK dependencies after switching versions',
negatable: false,
)
..addFlag(
'archive',
help: 'Install from a precompiled archive instead of cloning from git',
defaultsTo: false,
negatable: false,
);
}
@override
Expand All @@ -60,6 +66,7 @@ class UseCommand extends BaseFvmCommand {
final skipPubGet = boolArg('skip-pub-get');
final flavorOption = stringArg('flavor');
final skipSetup = boolArg('skip-setup');
final useArchive = boolArg('archive');

String? version;

Expand Down Expand Up @@ -136,7 +143,11 @@ class UseCommand extends BaseFvmCommand {

final flutterVersion = validateFlutterVersion(version);

final cacheVersion = await ensureCache(flutterVersion, force: forceOption);
final cacheVersion = await ensureCache(
flutterVersion,
force: forceOption,
useArchive: useArchive,
);

/// Run use workflow
await useVersion(
Expand Down
Loading
Loading