diff --git a/.github/workflows/testflight.yml b/.github/workflows/testflight.yml index 52aa8de7..d5707731 100644 --- a/.github/workflows/testflight.yml +++ b/.github/workflows/testflight.yml @@ -1,6 +1,16 @@ name: iOS TestFlight on: + workflow_dispatch: + inputs: + upload_to_app_store_connect: + description: Upload to App Store Connect + required: true + default: "false" + type: choice + options: + - "false" + - "true" pull_request: types: - closed @@ -25,16 +35,21 @@ permissions: jobs: testflight: - if: github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' && (contains(github.event.pull_request.labels.*.name, 'qa') || contains(github.event.pull_request.labels.*.name, 'qa-local')) + if: github.event_name == 'workflow_dispatch' || (github.event.pull_request.merged == true && github.event.pull_request.base.ref == 'develop' && (contains(github.event.pull_request.labels.*.name, 'qa') || contains(github.event.pull_request.labels.*.name, 'qa-local'))) runs-on: macos-latest timeout-minutes: 45 steps: - name: Checkout merge commit + if: github.event_name == 'pull_request' uses: actions/checkout@v5 with: ref: ${{ github.event.pull_request.merge_commit_sha }} + - name: Checkout current ref + if: github.event_name == 'workflow_dispatch' + uses: actions/checkout@v5 + - name: Install private config files uses: ./.github/actions/install-private-config with: @@ -78,10 +93,10 @@ jobs: - name: Build for TestFlight run: bundle exec fastlane testflight_build_only - - name: Skip TestFlight Upload for Local QA Label - if: contains(github.event.pull_request.labels.*.name, 'qa-local') - run: echo "Skipping TestFlight upload for PR labeled qa-local" + - name: Skip TestFlight Upload + if: (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'qa-local')) || (github.event_name == 'workflow_dispatch' && inputs.upload_to_app_store_connect != 'true') + run: echo "Skipping TestFlight upload" - name: Upload to TestFlight - if: contains(github.event.pull_request.labels.*.name, 'qa') && !contains(github.event.pull_request.labels.*.name, 'qa-local') + if: (github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'qa') && !contains(github.event.pull_request.labels.*.name, 'qa-local')) || (github.event_name == 'workflow_dispatch' && inputs.upload_to_app_store_connect == 'true') run: bundle exec fastlane upload_testflight_build diff --git a/DevLog/Presentation/ViewModel/HomeViewModel.swift b/DevLog/Presentation/ViewModel/HomeViewModel.swift index bb682889..1440c0cf 100644 --- a/DevLog/Presentation/ViewModel/HomeViewModel.swift +++ b/DevLog/Presentation/ViewModel/HomeViewModel.swift @@ -160,10 +160,10 @@ final class HomeViewModel: Store { func run(_ effect: SideEffect) { switch effect { case .fetchTodoCategoryPreferences: - beginLoading(for: .preferences, mode: .delayed) + beginLoading(for: .preferences, mode: .immediate) Task { do { - defer { endLoading(for: .preferences, mode: .delayed) } + defer { endLoading(for: .preferences, mode: .immediate) } let preferences = try await fetchPreferencesUseCase.execute() send(.setTodoCategory(preferences.map(TodoCategoryItem.init(from:)))) } catch { @@ -195,10 +195,10 @@ final class HomeViewModel: Store { } } case .fetchRecentTodos: - beginLoading(for: .recentTodos, mode: .delayed) + beginLoading(for: .recentTodos, mode: .immediate) Task { do { - defer { endLoading(for: .recentTodos, mode: .delayed) } + defer { endLoading(for: .recentTodos, mode: .immediate) } let page = try await fetchRecentTodos() let items = page.items .filter { $0.createdAt != $0.updatedAt } @@ -243,10 +243,10 @@ final class HomeViewModel: Store { } } case .fetchWebPages: - beginLoading(for: .webPage, mode: .delayed) + beginLoading(for: .webPage, mode: .immediate) Task { do { - defer { endLoading(for: .webPage, mode: .delayed) } + defer { endLoading(for: .webPage, mode: .immediate) } let pages = try await fetchWebPagesUseCase.execute("") send(.updateWebPages(pages.map { WebPageItem(from: $0) })) } catch {