Commit 730b81a465

730b81a465614a5bf198a48a7eededa02561dd1a

parent: ac7de0ce3c

Unsigned

cmc <hello@cleberg.net> · 2026-04-20 17:31 UTC

fix: change failed builds card on home tab to navigate to builds tab instead of implementing its own view

Fixes: https://todo.sr.ht/~ccleberg/hutch/66

Layout: unified · split

Hutch.xcodeproj/project.pbxproj +8 −8
@@ -517,7 +517,7 @@
517 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 517 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
518 CODE_SIGN_ENTITLEMENTS = Hutch/Hutch.entitlements; 518 CODE_SIGN_ENTITLEMENTS = Hutch/Hutch.entitlements;
519 CODE_SIGN_STYLE = Automatic; 519 CODE_SIGN_STYLE = Automatic;
520 CURRENT_PROJECT_VERSION = 79; 520 CURRENT_PROJECT_VERSION = 80;
521 DEVELOPMENT_TEAM = ZCNAX3VL9D; 521 DEVELOPMENT_TEAM = ZCNAX3VL9D;
522 ENABLE_PREVIEWS = YES; 522 ENABLE_PREVIEWS = YES;
523 GENERATE_INFOPLIST_FILE = YES; 523 GENERATE_INFOPLIST_FILE = YES;
@@ -534,7 +534,7 @@
534 "$(inherited)", 534 "$(inherited)",
535 "@executable_path/Frameworks", 535 "@executable_path/Frameworks",
536 ); 536 );
537 MARKETING_VERSION = 3.1.11; 537 MARKETING_VERSION = 3.1.12;
538 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch; 538 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch;
539 PRODUCT_NAME = "$(TARGET_NAME)"; 539 PRODUCT_NAME = "$(TARGET_NAME)";
540 STRING_CATALOG_GENERATE_SYMBOLS = YES; 540 STRING_CATALOG_GENERATE_SYMBOLS = YES;
@@ -554,7 +554,7 @@
554 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 554 ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
555 CODE_SIGN_ENTITLEMENTS = Hutch/Hutch.entitlements; 555 CODE_SIGN_ENTITLEMENTS = Hutch/Hutch.entitlements;
556 CODE_SIGN_STYLE = Automatic; 556 CODE_SIGN_STYLE = Automatic;
557 CURRENT_PROJECT_VERSION = 79; 557 CURRENT_PROJECT_VERSION = 80;
558 DEVELOPMENT_TEAM = ZCNAX3VL9D; 558 DEVELOPMENT_TEAM = ZCNAX3VL9D;
559 ENABLE_PREVIEWS = YES; 559 ENABLE_PREVIEWS = YES;
560 GENERATE_INFOPLIST_FILE = YES; 560 GENERATE_INFOPLIST_FILE = YES;
@@ -571,7 +571,7 @@
571 "$(inherited)", 571 "$(inherited)",
572 "@executable_path/Frameworks", 572 "@executable_path/Frameworks",
573 ); 573 );
574 MARKETING_VERSION = 3.1.11; 574 MARKETING_VERSION = 3.1.12;
575 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch; 575 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch;
576 PRODUCT_NAME = "$(TARGET_NAME)"; 576 PRODUCT_NAME = "$(TARGET_NAME)";
577 STRING_CATALOG_GENERATE_SYMBOLS = YES; 577 STRING_CATALOG_GENERATE_SYMBOLS = YES;
@@ -634,7 +634,7 @@
634 APPLICATION_EXTENSION_API_ONLY = YES; 634 APPLICATION_EXTENSION_API_ONLY = YES;
635 CODE_SIGN_ENTITLEMENTS = HutchWidgetExtension/HutchWidgetExtension.entitlements; 635 CODE_SIGN_ENTITLEMENTS = HutchWidgetExtension/HutchWidgetExtension.entitlements;
636 CODE_SIGN_STYLE = Automatic; 636 CODE_SIGN_STYLE = Automatic;
637 CURRENT_PROJECT_VERSION = 79; 637 CURRENT_PROJECT_VERSION = 80;
638 DEVELOPMENT_TEAM = ZCNAX3VL9D; 638 DEVELOPMENT_TEAM = ZCNAX3VL9D;
639 GENERATE_INFOPLIST_FILE = NO; 639 GENERATE_INFOPLIST_FILE = NO;
640 INFOPLIST_FILE = HutchWidgetExtension/Info.plist; 640 INFOPLIST_FILE = HutchWidgetExtension/Info.plist;
@@ -644,7 +644,7 @@
644 "@executable_path/Frameworks", 644 "@executable_path/Frameworks",
645 "@executable_path/../../Frameworks", 645 "@executable_path/../../Frameworks",
646 ); 646 );
647 MARKETING_VERSION = 3.1.11; 647 MARKETING_VERSION = 3.1.12;
648 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch.HutchWidgetExtension; 648 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch.HutchWidgetExtension;
649 PRODUCT_NAME = "$(TARGET_NAME)"; 649 PRODUCT_NAME = "$(TARGET_NAME)";
650 SKIP_INSTALL = YES; 650 SKIP_INSTALL = YES;
@@ -663,7 +663,7 @@
663 APPLICATION_EXTENSION_API_ONLY = YES; 663 APPLICATION_EXTENSION_API_ONLY = YES;
664 CODE_SIGN_ENTITLEMENTS = HutchWidgetExtension/HutchWidgetExtension.entitlements; 664 CODE_SIGN_ENTITLEMENTS = HutchWidgetExtension/HutchWidgetExtension.entitlements;
665 CODE_SIGN_STYLE = Automatic; 665 CODE_SIGN_STYLE = Automatic;
666 CURRENT_PROJECT_VERSION = 79; 666 CURRENT_PROJECT_VERSION = 80;
667 DEVELOPMENT_TEAM = ZCNAX3VL9D; 667 DEVELOPMENT_TEAM = ZCNAX3VL9D;
668 GENERATE_INFOPLIST_FILE = NO; 668 GENERATE_INFOPLIST_FILE = NO;
669 INFOPLIST_FILE = HutchWidgetExtension/Info.plist; 669 INFOPLIST_FILE = HutchWidgetExtension/Info.plist;
@@ -673,7 +673,7 @@
673 "@executable_path/Frameworks", 673 "@executable_path/Frameworks",
674 "@executable_path/../../Frameworks", 674 "@executable_path/../../Frameworks",
675 ); 675 );
676 MARKETING_VERSION = 3.1.11; 676 MARKETING_VERSION = 3.1.12;
677 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch.HutchWidgetExtension; 677 PRODUCT_BUNDLE_IDENTIFIER = net.cleberg.Hutch.HutchWidgetExtension;
678 PRODUCT_NAME = "$(TARGET_NAME)"; 678 PRODUCT_NAME = "$(TARGET_NAME)";
679 SKIP_INSTALL = YES; 679 SKIP_INSTALL = YES;
Hutch/Views/Home/HomeView.swift +3 −2
@@ -135,8 +135,8 @@ struct HomeView: View {
135 135
136 private func buildsSection(_ viewModel: HomeViewModel) -> some View { 136 private func buildsSection(_ viewModel: HomeViewModel) -> some View {
137 Section("Builds") { 137 Section("Builds") {
138 NavigationLink { 138 Button {
139 BuildListView() 139 appState.navigateToBuildsList()
140 } label: { 140 } label: {
141 HomeSummaryRow( 141 HomeSummaryRow(
142 title: buildsTitle(viewModel), 142 title: buildsTitle(viewModel),
@@ -146,6 +146,7 @@ struct HomeView: View {
146 emphasis: .monitoring 146 emphasis: .monitoring
147 ) 147 )
148 } 148 }
149 .buttonStyle(.plain)
149 .themedRow() 150 .themedRow()
150 } 151 }
151 } 152 }
HutchTests/AppStateTests.swift +11
@@ -34,6 +34,17 @@ struct AppStateTests {
34 #expect(appState.pendingTabNavigation == .systemStatus) 34 #expect(appState.pendingTabNavigation == .systemStatus)
35 } 35 }
36 36
37 @Test
38 @MainActor
39 func navigateToBuildsListSelectsBuildsTabAndQueuesBuildsNavigation() {
40 let appState = AppState()
41
42 appState.navigateToBuildsList()
43
44 #expect(appState.selectedTab == .builds)
45 #expect(appState.pendingTabNavigation == .builds)
46 }
47
37 @Test 48 @Test
38 @MainActor 49 @MainActor
39 func navigationHelpersQueueExpectedTargets() { 50 func navigationHelpersQueueExpectedTargets() {