Skip to content

Commit 680e36b

Browse files
Merge pull request #1 from rawandahmad698/add-meeting-detection
2 parents cadcc16 + 439b250 commit 680e36b

File tree

103 files changed

+1815
-103
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

103 files changed

+1815
-103
lines changed

.github/pull_request_template.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
## Description
2+
<!-- Provide a brief description of the changes in this PR -->
3+
4+
## Type of Change
5+
- [ ] Bug fix (non-breaking change which fixes an issue)
6+
- [ ] New feature (non-breaking change which adds functionality)
7+
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
8+
- [ ] Documentation update
9+
- [ ] Test improvement
10+
11+
## Testing
12+
- [ ] Unit tests pass locally
13+
- [ ] New tests have been added for new functionality
14+
- [ ] Existing tests have been updated if needed
15+
16+
## Checklist
17+
- [ ] I have performed a self-review of my own code
18+
- [ ] I have commented my code where necessary (following the no-comments rule)
19+
- [ ] My changes generate no new warnings
20+
- [ ] Any dependent changes have been merged and published
21+
22+
## Screenshots (if applicable)
23+
<!-- Add screenshots to help explain your changes -->
24+
25+
## Additional Notes
26+
<!-- Add any additional notes or context about the PR here -->

.github/workflows/ci.yml

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
7+
branches: [ main ]
8+
workflow_dispatch:
9+
10+
jobs:
11+
lint:
12+
name: SwiftLint
13+
runs-on: macos-15
14+
15+
steps:
16+
- name: Checkout code
17+
uses: actions/checkout@v4
18+
19+
- name: Install SwiftLint
20+
run: brew install swiftlint
21+
22+
- name: Run SwiftLint
23+
run: |
24+
cd Recap
25+
swiftlint --strict --reporter github-actions-logging
26+
27+
build:
28+
name: Build
29+
runs-on: macos-15
30+
31+
steps:
32+
- name: Checkout code
33+
uses: actions/checkout@v4
34+
35+
- name: Setup Xcode
36+
uses: maxim-lobanov/setup-xcode@v1
37+
with:
38+
xcode-version: latest-stable
39+
40+
- name: Cache DerivedData
41+
uses: actions/cache@v4
42+
with:
43+
path: ~/Library/Developer/Xcode/DerivedData
44+
key: ${{ runner.os }}-deriveddata-${{ hashFiles('Recap.xcodeproj/project.pbxproj') }}
45+
restore-keys: |
46+
${{ runner.os }}-deriveddata-
47+
48+
- name: Resolve Package Dependencies
49+
run: |
50+
xcodebuild -resolvePackageDependencies \
51+
-project Recap.xcodeproj \
52+
-scheme Recap
53+
54+
- name: Build Debug
55+
run: |
56+
xcodebuild build \
57+
-project Recap.xcodeproj \
58+
-scheme Recap \
59+
-configuration Debug \
60+
-destination 'platform=macOS' \
61+
-skipMacroValidation \
62+
CODE_SIGNING_ALLOWED=NO
63+
64+
- name: Build Release
65+
run: |
66+
xcodebuild build \
67+
-project Recap.xcodeproj \
68+
-scheme Recap \
69+
-configuration Release \
70+
-destination 'platform=macOS' \
71+
-skipMacroValidation \
72+
CODE_SIGNING_ALLOWED=NO
73+
74+
test:
75+
name: Test
76+
runs-on: macos-15
77+
needs: build
78+
79+
steps:
80+
- name: Checkout code
81+
uses: actions/checkout@v4
82+
83+
- name: Setup Xcode
84+
uses: maxim-lobanov/setup-xcode@v1
85+
with:
86+
xcode-version: latest-stable
87+
88+
- name: Cache DerivedData
89+
uses: actions/cache@v4
90+
with:
91+
path: ~/Library/Developer/Xcode/DerivedData
92+
key: ${{ runner.os }}-deriveddata-${{ hashFiles('Recap.xcodeproj/project.pbxproj') }}
93+
restore-keys: |
94+
${{ runner.os }}-deriveddata-
95+
96+
- name: Resolve Package Dependencies
97+
run: |
98+
xcodebuild -resolvePackageDependencies \
99+
-project Recap.xcodeproj \
100+
-scheme Recap
101+
102+
- name: Run Tests with Coverage
103+
run: |
104+
xcodebuild test \
105+
-project Recap.xcodeproj \
106+
-scheme Recap \
107+
-destination 'platform=macOS' \
108+
-resultBundlePath TestResults.xcresult \
109+
-enableCodeCoverage YES \
110+
-only-testing:RecapTests \
111+
-skipMacroValidation \
112+
CODE_SIGNING_ALLOWED=NO
113+
114+
- name: Generate Coverage Report
115+
run: |
116+
xcrun xccov view --report --json TestResults.xcresult > coverage.json
117+
118+
- name: Upload Test Results
119+
uses: actions/upload-artifact@v4
120+
if: always()
121+
with:
122+
name: test-results
123+
path: TestResults.xcresult
124+
125+
- name: Upload Coverage Reports
126+
uses: codecov/codecov-action@v5
127+
with:
128+
file: coverage.json
129+
flags: unittests
130+
name: recap-coverage
131+
fail_ci_if_error: false

.github/workflows/pr-tests.yml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: PR Tests
2+
3+
on:
4+
pull_request:
5+
types: [opened, synchronize, reopened]
6+
7+
permissions:
8+
contents: read
9+
pull-requests: write
10+
11+
jobs:
12+
test:
13+
name: Test PR
14+
runs-on: macos-15
15+
16+
steps:
17+
- name: Checkout code
18+
uses: actions/checkout@v4
19+
20+
- name: Setup Xcode
21+
uses: maxim-lobanov/setup-xcode@v1
22+
with:
23+
xcode-version: latest-stable
24+
25+
- name: Cache DerivedData
26+
uses: actions/cache@v4
27+
with:
28+
path: ~/Library/Developer/Xcode/DerivedData
29+
key: ${{ runner.os }}-deriveddata-${{ hashFiles('Recap.xcodeproj/project.pbxproj') }}
30+
restore-keys: |
31+
${{ runner.os }}-deriveddata-
32+
33+
- name: Resolve Package Dependencies
34+
run: |
35+
xcodebuild -resolvePackageDependencies \
36+
-project Recap.xcodeproj \
37+
-scheme Recap
38+
39+
- name: Build and Test
40+
run: |
41+
xcodebuild test \
42+
-project Recap.xcodeproj \
43+
-scheme Recap \
44+
-destination 'platform=macOS' \
45+
-resultBundlePath TestResults.xcresult \
46+
-only-testing:RecapTests \
47+
-skipMacroValidation \
48+
CODE_SIGNING_ALLOWED=NO
49+
50+
- name: Comment PR on Failure
51+
if: failure() && github.event_name == 'pull_request'
52+
uses: actions/github-script@v7
53+
with:
54+
github-token: ${{secrets.GITHUB_TOKEN}}
55+
script: |
56+
github.rest.issues.createComment({
57+
issue_number: context.issue.number,
58+
owner: context.repo.owner,
59+
repo: context.repo.repo,
60+
body: '❌ Tests failed. Please check the [workflow logs](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}).'
61+
})
62+
63+
- name: Comment PR on Success
64+
if: success() && github.event_name == 'pull_request'
65+
uses: actions/github-script@v7
66+
with:
67+
github-token: ${{secrets.GITHUB_TOKEN}}
68+
script: |
69+
github.rest.issues.createComment({
70+
issue_number: context.issue.number,
71+
owner: context.repo.owner,
72+
repo: context.repo.repo,
73+
body: '✅ All tests passed!'
74+
})

.github/workflows/test.yml

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
name: Test Suite
2+
3+
on:
4+
push:
5+
branches: [ main ]
6+
pull_request:
7+
branches: [ main ]
8+
workflow_dispatch:
9+
10+
jobs:
11+
test:
12+
name: Run Tests
13+
runs-on: macos-15
14+
15+
steps:
16+
- name: Checkout code
17+
uses: actions/checkout@v4
18+
19+
- name: Setup Xcode
20+
uses: maxim-lobanov/setup-xcode@v1
21+
with:
22+
xcode-version: latest-stable
23+
24+
- name: Cache DerivedData
25+
uses: actions/cache@v4
26+
with:
27+
path: ~/Library/Developer/Xcode/DerivedData
28+
key: ${{ runner.os }}-deriveddata-${{ hashFiles('Recap.xcodeproj/project.pbxproj') }}
29+
restore-keys: |
30+
${{ runner.os }}-deriveddata-
31+
32+
- name: Resolve Package Dependencies
33+
run: |
34+
xcodebuild -resolvePackageDependencies \
35+
-project Recap.xcodeproj \
36+
-scheme Recap
37+
38+
- name: Build and Test
39+
run: |
40+
xcodebuild test \
41+
-project Recap.xcodeproj \
42+
-scheme Recap \
43+
-destination 'platform=macOS' \
44+
-resultBundlePath TestResults.xcresult \
45+
-enableCodeCoverage YES \
46+
-only-testing:RecapTests \
47+
-skipMacroValidation \
48+
CODE_SIGNING_ALLOWED=NO
49+
50+
- name: Upload Test Results
51+
uses: actions/upload-artifact@v4
52+
if: always()
53+
with:
54+
name: test-results
55+
path: TestResults.xcresult
56+
57+
- name: Generate Coverage Report
58+
run: |
59+
xcrun xccov view --report --json TestResults.xcresult > coverage.json
60+
61+
- name: Upload Coverage
62+
uses: codecov/codecov-action@v5
63+
with:
64+
file: coverage.json
65+
flags: unittests
66+
name: recap-coverage
67+
fail_ci_if_error: false

Recap.xcodeproj/project.pbxproj

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,16 @@
4242
A7C35B1B2E3DFE1D00F9261F /* Exceptions for "Recap" folder in "RecapTests" target */ = {
4343
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
4444
membershipExceptions = (
45+
Audio/Models/AudioProcess.swift,
46+
Audio/Models/AudioProcessGroup.swift,
47+
Audio/Processing/Detection/AudioProcessControllerType.swift,
48+
Components/Buttons/PillButton.swift,
49+
Components/Cards/ActionableWarningCard.swift,
4550
DataModels/RecapDataModel.xcdatamodeld,
4651
"Helpers/Colors/Color+Extension.swift",
47-
Helpers/UIConstants.swift,
52+
Helpers/Constants/AppConstants.swift,
53+
Helpers/Constants/UIConstants.swift,
54+
Helpers/MeetingDetection/MeetingPatternMatcher.swift,
4855
Repositories/Models/LLMProvider.swift,
4956
Repositories/Models/RecordingInfo.swift,
5057
Repositories/Models/UserPreferencesInfo.swift,
@@ -54,6 +61,12 @@
5461
Repositories/UserPreferences/UserPreferencesRepositoryType.swift,
5562
Services/CoreData/CoreDataManagerType.swift,
5663
Services/LLM/Core/LLMError.swift,
64+
Services/MeetingDetection/Core/MeetingDetectionService.swift,
65+
Services/MeetingDetection/Core/MeetingDetectionServiceType.swift,
66+
Services/MeetingDetection/Detectors/GoogleMeetDetector.swift,
67+
Services/MeetingDetection/Detectors/MeetingDetectorType.swift,
68+
Services/MeetingDetection/Detectors/TeamsMeetingDetector.swift,
69+
Services/MeetingDetection/Detectors/ZoomMeetingDetector.swift,
5770
Services/Processing/Models/ProcessingError.swift,
5871
Services/Processing/Models/ProcessingResult.swift,
5972
Services/Processing/Models/ProcessingState.swift,
@@ -65,10 +78,16 @@
6578
Services/Summarization/Models/SummarizationResult.swift,
6679
Services/Summarization/SummarizationServiceType.swift,
6780
Services/Transcription/TranscriptionServiceType.swift,
68-
Views/Summary/Components/ProcessingProgressBar.swift,
69-
Views/Summary/Components/ProcessingStatesCard.swift,
70-
Views/Summary/ViewModel/SummaryViewModel.swift,
71-
Views/Summary/ViewModel/SummaryViewModelType.swift,
81+
Services/Warnings/WarningManagerType.swift,
82+
UseCases/Settings/Components/MeetingDetection/MeetingDetectionView.swift,
83+
UseCases/Settings/Components/Reusable/CustomToggle.swift,
84+
UseCases/Settings/Components/SettingsCard.swift,
85+
UseCases/Settings/ViewModels/MeetingDetection/MeetingDetectionSettingsViewModel.swift,
86+
UseCases/Settings/ViewModels/MeetingDetection/MeetingDetectionSettingsViewModelType.swift,
87+
UseCases/Summary/Components/ProcessingProgressBar.swift,
88+
UseCases/Summary/Components/ProcessingStatesCard.swift,
89+
UseCases/Summary/ViewModel/SummaryViewModel.swift,
90+
UseCases/Summary/ViewModel/SummaryViewModelType.swift,
7291
);
7392
target = A721065F2E30165B0073C515 /* RecapTests */;
7493
};
@@ -515,7 +534,7 @@
515534
CURRENT_PROJECT_VERSION = 1;
516535
DEVELOPMENT_TEAM = EY7EQX6JC5;
517536
GENERATE_INFOPLIST_FILE = YES;
518-
MACOSX_DEPLOYMENT_TARGET = 15.5;
537+
MACOSX_DEPLOYMENT_TARGET = 15.0;
519538
MARKETING_VERSION = 1.0;
520539
PRODUCT_BUNDLE_IDENTIFIER = dev.rawa.RecapTests;
521540
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -534,7 +553,7 @@
534553
CURRENT_PROJECT_VERSION = 1;
535554
DEVELOPMENT_TEAM = EY7EQX6JC5;
536555
GENERATE_INFOPLIST_FILE = YES;
537-
MACOSX_DEPLOYMENT_TARGET = 15.5;
556+
MACOSX_DEPLOYMENT_TARGET = 15.0;
538557
MARKETING_VERSION = 1.0;
539558
PRODUCT_BUNDLE_IDENTIFIER = dev.rawa.RecapTests;
540559
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -551,6 +570,7 @@
551570
CURRENT_PROJECT_VERSION = 1;
552571
DEVELOPMENT_TEAM = EY7EQX6JC5;
553572
GENERATE_INFOPLIST_FILE = YES;
573+
MACOSX_DEPLOYMENT_TARGET = 15.0;
554574
MARKETING_VERSION = 1.0;
555575
PRODUCT_BUNDLE_IDENTIFIER = dev.rawa.RecapUITests;
556576
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -567,6 +587,7 @@
567587
CURRENT_PROJECT_VERSION = 1;
568588
DEVELOPMENT_TEAM = EY7EQX6JC5;
569589
GENERATE_INFOPLIST_FILE = YES;
590+
MACOSX_DEPLOYMENT_TARGET = 15.0;
570591
MARKETING_VERSION = 1.0;
571592
PRODUCT_BUNDLE_IDENTIFIER = dev.rawa.RecapUITests;
572593
PRODUCT_NAME = "$(TARGET_NAME)";
-263 KB
Binary file not shown.
-4.73 KB
Binary file not shown.
-510 Bytes
Binary file not shown.
-14.9 KB
Binary file not shown.
-1012 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)