3743 Commits

Author SHA1 Message Date
Patrick Honkonen
11d9537b05
Move coverage reports to root directory for Codecov upload
This commit updates the `test.yml` GitHub workflow to correctly process and locate code coverage reports before uploading them to Codecov.

The previous steps extracted coverage reports from `.tar` and `.zip` archives into subdirectories within the `coverage-reports` directory. This commit adds a step to move all extracted `.xml` files from these subdirectories into the root of the `coverage-reports` directory. Additionally, it cleans up the original `.tar` and `.zip` archives after extraction to save space. This ensures that the Codecov action can find all the necessary XML reports in the expected location.
2025-10-30 09:29:46 -04:00
Patrick Honkonen
954f39d432
Extract coverage reports before uploading
This commit adds a new step to the `test.yml` GitHub Actions workflow to extract coverage reports from downloaded artifacts.

Previously, the workflow would download coverage report artifacts but did not extract them before the upload step. This change adds a new step named "Extract coverage reports from archives" that finds all `.tar` and `.zip` files within the `coverage-reports/` directory and extracts their contents. This ensures that the individual XML coverage files are available for the subsequent "Upload to codecov.io" step.
2025-10-30 09:29:45 -04:00
Patrick Honkonen
8b72b1e29e
Fix ConcurrentModificationException in coverage report generation
Problem:
Running tests and coverage report generation as separate Gradle invocations
caused a ConcurrentModificationException when Kover tried to access test
execution data:
  Could not determine the dependencies of task ':app:koverGenerateArtifactStandardDebug'
  > java.util.ConcurrentModificationException (no error message)

Root Cause:
- Configuration cache is enabled (improves build performance)
- Kover's coverage tasks need test execution data from the same Gradle session
- Separate invocations = separate Gradle daemon sessions
- Coverage report task cannot access test data from previous invocation
- Configuration cache + separate invocations = state corruption

Solution:
Combine test execution and coverage generation into single Gradle command:
  BEFORE: ./gradlew :app:testStandardDebug
          ./gradlew :app:koverXmlReportStandardDebug  # Fails!

  AFTER:  ./gradlew :app:testStandardDebug :app:koverXmlReportStandardDebug

Benefits:
- Both tasks run in same Gradle daemon session
- Coverage task has access to test execution data
- Configuration cache works correctly
- No state corruption between invocations

Applied to all test jobs:
- test-libraries: Combined 6 test + 6 coverage tasks
- test-app: Combined test + coverage
- test-authenticator: Combined test + coverage
2025-10-30 09:29:45 -04:00
Patrick Honkonen
d58de79eca
Fix coverage aggregation in parallel test workflow
Problem:
The aggregate-coverage job was failing because koverXmlReportMergedCoverage
requires all tests to have run in the same Gradle session. When tests are
split across separate jobs, Kover has no test execution data to merge.

Root Cause:
- Kover collects binary coverage data during test execution
- koverXmlReportMergedCoverage merges this data from the current build
- In parallel jobs, the aggregation job never ran any tests
- Result: No coverage data to merge, causing exit code 1

Solution:
1. Each test job now generates its own XML coverage report immediately
   after running tests:
   - test-libraries: koverXmlReportDebug for each library module
   - test-app: koverXmlReportStandardDebug
   - test-authenticator: koverXmlReportDebug

2. Coverage artifacts now contain XML reports, not just binary data

3. Aggregation job simplified:
   - Remove Fastlane/Ruby setup (no longer needed)
   - Download all coverage-* artifacts
   - Upload entire coverage-reports/ directory to codecov
   - Codecov automatically merges multiple XML files

Benefits:
- Each module's coverage is captured independently
- No dependency on cross-job Gradle state
- Codecov handles merging (tested and reliable)
- Simpler, more maintainable workflow

Technical Details:
- Kover generates XML reports at: module/build/reports/kover/report*.xml
- Codecov action with directory parameter finds all XML files recursively
- disable_search=false allows automatic file discovery
2025-10-30 09:29:45 -04:00
Patrick Honkonen
d6a5f5bbc7
Restructure test workflow with parallel job execution (Tier 1)
Major changes:
- Split single test job into 5 parallel jobs:
  1. lint-and-static-analysis: Run detekt and lint checks
  2. test-libraries: Test core, data, network, ui, authenticatorbridge, cxf
  3. test-app: Test app module (5,447 tests)
  4. test-authenticator: Test authenticator module (281 tests)
  5. aggregate-coverage: Merge coverage reports and upload to codecov

Benefits:
- 40-55% expected reduction in CI runtime
- Early failure detection (lint and library tests complete quickly)
- Better resource utilization across 5 concurrent jobs
- Maintains existing coverage reporting behavior

Technical details:
- Each test job uploads test reports and coverage data as artifacts
- Coverage aggregation job downloads all coverage artifacts
- Uses Fastlane's koverXmlReportMergedCoverage for merging
- Preserves all existing codecov.io integration
2025-10-30 09:29:45 -04:00
Patrick Honkonen
facfec128d
Enable Gradle configuration cache for faster builds
- Add org.gradle.configuration-cache=true
- Set problems to warn level to identify compatibility issues
- Expected 5-15% improvement in Gradle configuration phase
- Part of test workflow optimization (Tier 1)
2025-10-30 09:29:45 -04:00
David Perez
600744538d
Fix deprecation within the app (#6096) 2025-10-29 21:02:03 +00:00
David Perez
de33ba021b
Update the Google Protobuf library (#6095) 2025-10-29 21:01:35 +00:00
David Perez
290f59441f
Update Kotlin, ksp, and kover to the latest versions (#6094) 2025-10-29 19:27:06 +00:00
David Perez
94c51cacf9
Update Androidx dependencies (#6093) 2025-10-29 16:53:48 +00:00
Dev Sharma
6f27642a30
[PM-27589] [PM-27158] fix : Sub folders always show 0 items (#6092) 2025-10-29 15:54:15 +00:00
Dev Sharma
2ad3014da2
[PM-27516] [PM 27157] Custom text field edit multiline fix (#6088) 2025-10-29 15:44:44 +00:00
renovate[bot]
e6dc8e02f8
[deps]: Lock file maintenance (#6083)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-28 21:34:02 +00:00
David Perez
c16d31fb33
PM-27494: Update custom vault timeout UI (#6085) 2025-10-27 21:13:36 +00:00
David Perez
43d7b84d0a
PM-27136: Update Snackbar font when there is no header (#6086) 2025-10-27 19:53:31 +00:00
André Bispo
c0f8307361
[PM-26420] FlightRecorder vault unlock method (#6084) 2025-10-27 17:55:51 +00:00
mpbw2
064a98f86b
[PM-22157] independent version names in build workflows (#6074) 2025-10-27 17:51:56 +00:00
David Perez
e3b111c383
PM-19302: Add support for a typed vault timeout policy (#6078) 2025-10-27 16:28:01 +00:00
Mick Letofsky
52304a266e
Implement reusable Claude code review workflow (#6072)
Co-authored-by: Patrick Honkonen <phonkonen@bitwarden.com>
2025-10-27 14:19:37 +00:00
David Perez
51c23ec464
Minor clean up for the Account Security Screen (#6076) 2025-10-24 15:55:50 +00:00
André Bispo
7d7951d4ca
[PM-27176] Switch to using SDK's init crypto with MasterPasswordUnlock (#6073) 2025-10-24 13:56:44 +00:00
bw-ghapp[bot]
78b1676745
Crowdin Pull (#6077)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2025-10-24 13:20:49 +00:00
aj-rosado
be27c76bd3
[PM-27092] Changing screen capture flow from event based to state based on Authenticator (#6062) 2025-10-24 09:26:53 +00:00
David Perez
38bdda0a41
Create reusable supporting content composable (#6075) 2025-10-23 20:07:04 +00:00
David Perez
c61fec176a
PM-27271: Update selection button disabled state (#6071) 2025-10-23 16:23:06 +00:00
Patrick Honkonen
bb11b17823
[PM-26810] Clear password input after successful OTP verification (#6070) 2025-10-23 13:09:29 +00:00
David Perez
562b48d689
Fix TopAppBar height for multiline titles (#6069) 2025-10-22 21:09:28 +00:00
Patrick Honkonen
c3496ca60f
[PM-26810] Remove loading dialog flicker on vault data updates (#6068) 2025-10-22 20:30:48 +00:00
Nailik
a8f8450ec9
[PM-27088] fix unit test execution (#6048) 2025-10-22 20:27:59 +00:00
David Perez
47628a6da2
Remove night-mode icon variants where possible (#6066) 2025-10-22 20:06:13 +00:00
David Perez
5a540a3460
PM-27263: Add enum for Vault Timeout Policy actions (#6067) 2025-10-22 20:05:48 +00:00
David Perez
92cfce1224
PM-27202: Update ItemListingScreen layout for improved spacing (#6065) 2025-10-22 14:42:35 +00:00
David Perez
4597337500
PM-27210: Add dynamic color support to Authenticator (#6063) 2025-10-22 14:42:18 +00:00
aj-rosado
e610a7541d
[PM-27001] Skip account selection only one exists on cxp flow (#6055) 2025-10-22 09:08:35 +00:00
David Perez
ae4b398258
PM-27153: Update copy in Authenticator app (#6061) 2025-10-21 16:06:08 +00:00
David Perez
0482f9eb4d
Update drawable names with consistent prefixes (#6060) 2025-10-21 15:54:31 +00:00
André Bispo
9f4bd70c8d
[PM-26420] Add flight recorder logs for vault unlock method and PIN migration (#6052) 2025-10-20 22:29:10 +00:00
David Perez
9874aad65a
PM-27149: Update empty vault illustration (#6059) 2025-10-20 21:46:31 +00:00
David Perez
97bb93c18e
PM-27136: Replace FirstTimeSyncSnackbarHost with BitwardenSnackbarHost (#6058) 2025-10-20 20:42:47 +00:00
Patrick Honkonen
31e7e05eda
[PM-27130] Update alert (Snackbar) color to inverseSurface in dynamic color scheme (#6057) 2025-10-20 18:15:03 +00:00
André Bispo
afeeb494da
[PM-23290] Migrate PIN unlock keys to PinProtectedUserKeyEnvelope (#6024) 2025-10-20 17:31:12 +00:00
aj-rosado
d5912a5dc3
[PM-26986] Hide select other account button if user has no other account (#6041) 2025-10-20 16:02:43 +00:00
bw-ghapp[bot]
13fa8a1ed0
Update SDK to 1.0.0-3436-2a00b727 (#6042)
Co-authored-by: bw-ghapp[bot] <178206702+bw-ghapp[bot]@users.noreply.github.com>
2025-10-20 15:55:31 +00:00
David Perez
5a145ee163
Update OkHttp to latest version (#6054) 2025-10-20 15:35:09 +00:00
celenityy
74b9a12e19
[PM-27076] Add support for IronFox Nightly (#6046)
Signed-off-by: celenity <celenity@celenity.dev>
v2025.10.1-bwpm v2025.10.1-bwa
2025-10-17 13:34:29 +00:00
David Perez
71e830bb09
PM-26912: Update copy for authenticator security (#6045)
Co-authored-by: Patrick Honkonen <phonkonen@bitwarden.com>
2025-10-17 13:27:19 +00:00
David Perez
8f3f1fa3ba
PM-27071: Add overflow menu to authenticator search (#6044) 2025-10-17 12:58:17 +00:00
bw-ghapp[bot]
9bd35ccca5
Crowdin Pull (#6047)
Co-authored-by: bitwarden-devops-bot <106330231+bitwarden-devops-bot@users.noreply.github.com>
2025-10-17 12:57:56 +00:00
Patrick Honkonen
74aa0a78ec
[PM-26810] Add OTP support to VerifyPasswordScreen (#6034) 2025-10-16 21:02:52 +00:00
David Perez
ae3470c598
Fix flaky test (#6043) 2025-10-16 19:18:58 +00:00