Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix part of #5343: Introduce new CI workflow for Code Coverage #5465

Merged
merged 344 commits into from
Aug 10, 2024
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
344 commits
Select commit Hold shift + click to select a range
4d5c21f
Fix Lint checks, resolved todos
Rd4dev Jul 10, 2024
4c87573
Specifying jdk version for TestBazelWorkspace build to see if this is…
Rd4dev Jul 10, 2024
3d810b2
Update TestBazelWorkspace tests to include jdk version in the bazelrc…
Rd4dev Jul 10, 2024
595e9df
Fix Lint checks on indentation
Rd4dev Jul 10, 2024
4bc533f
Refactored execute's return value to unit
Rd4dev Jul 11, 2024
ba16aaf
Refactor to take in a list of file paths as args for both cli and ci
Rd4dev Jul 11, 2024
138a141
Reverting --test_timeout flag to see other possible fixes
Rd4dev Jul 11, 2024
75e28e2
Add size large to RunCoverageTest to set timeout to 900 seconds
Rd4dev Jul 11, 2024
9da53d9
Updated tests to changes in taking in as a list of files as args
Rd4dev Jul 12, 2024
aaf3caf
Resolve merge conflict after test timeout and fetch error fixes in ed…
Rd4dev Jul 12, 2024
53d3d79
Resolve merge conflict after test timeout and fetch error fixes in ed…
Rd4dev Jul 12, 2024
d3eb372
Updated processTimeout to set as standard 5 minutes and moved outCont…
Rd4dev Jul 12, 2024
9b5995e
Merge branch 'code_coverage_fix_edge_cases' of https://github.com/opp…
Rd4dev Jul 12, 2024
fcf365e
Fix Lint checks, kdoc checks and updated tests for CoverageRunner, Co…
Rd4dev Jul 12, 2024
7f1bda0
Update tests for list of files as args implementation
Rd4dev Jul 12, 2024
6710f66
Retriggering since localTestHtmlFormat pass locally and to confirm if…
Rd4dev Jul 12, 2024
756bed8
Adding shard_count to see if that is making any difference
Rd4dev Jul 12, 2024
ab60123
Addition of dividing tests with shards did help with ci checks, now r…
Rd4dev Jul 12, 2024
d25ea9c
Adding back shards since that significantly lessens the test run time…
Rd4dev Jul 12, 2024
8802b27
Merge branch 'code_coverage_fix_edge_cases' of https://github.com/opp…
Rd4dev Jul 12, 2024
7a2f66b
Merge branch 'code_coverage_many_to_one_targets' of https://github.co…
Rd4dev Jul 12, 2024
66a387e
Merge branch 'develop' of https://github.com/Rd4dev/oppia-android int…
Rd4dev Jul 13, 2024
50574ae
Merge branch 'code_coverage_fix_edge_cases' of https://github.com/opp…
Rd4dev Jul 13, 2024
f170487
Changed base branch to develop in the repo and added reference comment
Rd4dev Jul 13, 2024
a720fe7
Updated Tests and the code now fails with Coverage Check Status
Rd4dev Jul 15, 2024
5c527a9
Resolve conflict with upstream many to one target branch
Rd4dev Jul 15, 2024
4350f5e
Fix failing test cases with changes to list of files and lint fixes
Rd4dev Jul 15, 2024
6fed0c0
Refactored runCoverageForFile generation separate function and added …
Rd4dev Jul 15, 2024
5e17837
Incrementing the shard count to 12 since the tests timeout in ci
Rd4dev Jul 15, 2024
bae304a
Decrementing the shard count to 8 to not cause overhead of resources,…
Rd4dev Jul 15, 2024
b0432f1
Reverting shards count to 4 but doubt if the cases are cached
Rd4dev Jul 15, 2024
f6fa8af
Incrementing the shard count to 6 since the tests timeout in ci with …
Rd4dev Jul 15, 2024
57f0875
Introduced ComputeChangedFiles utility to get the list of changed fil…
Rd4dev Jul 18, 2024
2d8166a
Replicated the Grouping and Sharding Strategy of test buckets for cha…
Rd4dev Jul 19, 2024
660c6bd
CI workflow to display and output the list of computed changed files
Rd4dev Jul 19, 2024
ede33c4
Ignoring the compute all files implementation need to confirm the git…
Rd4dev Jul 19, 2024
0635875
Retrieving Changed Files from the encoded bucket
Rd4dev Jul 19, 2024
919afdd
Replicating the unit test yaml implementation for code coverages
Rd4dev Jul 19, 2024
e242b9f
Add build targets for the retrieve changed files
Rd4dev Jul 19, 2024
0985145
Added missing changed files proto dependency
Rd4dev Jul 19, 2024
81257bc
Increasing the min threshold to 90 to see if the Coverage Check fails
Rd4dev Jul 19, 2024
61de269
Not a fix, just making sure if increasing the processTimeout helps, p…
Rd4dev Jul 19, 2024
7c32b5e
Exempting the file compute affected tests to cause a intentional cove…
Rd4dev Jul 19, 2024
b3df84b
Running the coverage script only once remvoing attempts
Rd4dev Jul 19, 2024
357cc5d
The coverage check job was ignored in the last ci run so re-commentin…
Rd4dev Jul 19, 2024
707a749
Introduced a new utility just to retrieve the test targets for the se…
Rd4dev Jul 19, 2024
81bab77
Added missing import for ScriptBackgroundCoroutineDispatcher in retri…
Rd4dev Jul 19, 2024
446a916
Using the instance of ScriptBackgroundCoroutineDispatcher
Rd4dev Jul 19, 2024
b46708d
Moving the file test target list implementation into script bg corout…
Rd4dev Jul 19, 2024
2c01848
Reverting the file exemption coverage case since we have other issues…
Rd4dev Jul 19, 2024
fe42482
Replacing the bazel coverage command with bazel test --collect covera…
Rd4dev Jul 19, 2024
67c0036
Removing the print statement for Raw Coverage Data since that seems t…
Rd4dev Jul 19, 2024
2a12472
Incrementing the shard to 24 to align with compute affected tests tes…
Rd4dev Jul 19, 2024
46b779a
Finding Test file paths to retrieve test targets for building the tes…
Rd4dev Jul 20, 2024
e8341cc
Visibility and Type fixes in retrieve changed files changes
Rd4dev Jul 20, 2024
1d5eeb4
Added test file exemption asset data to the build
Rd4dev Jul 20, 2024
113a828
Moving down the target declaration since test file exemption asset is…
Rd4dev Jul 20, 2024
a198c56
Re running to confirm if the coverage percentages are same throughout…
Rd4dev Jul 20, 2024
8c9800b
Re running to confirm since last ci did show difference in coverage p…
Rd4dev Jul 20, 2024
d4f8015
Printing out coverage report data utilizing collect coverage flag
Rd4dev Jul 21, 2024
7e139fe
Replacing the parseCoverage functionality with combined coverage repo…
Rd4dev Jul 21, 2024
ef3318b
Printing the final report Text and specific dat lines
Rd4dev Jul 21, 2024
606225f
Re running coverage analysis to check the coverage percentages
Rd4dev Jul 21, 2024
968474b
Re running coverage analysis attempt: 3 to check the coverage percent…
Rd4dev Jul 21, 2024
22f201d
Re running, also un commenting the oppia build tests caching - probab…
Rd4dev Jul 21, 2024
0808192
Re running while uncommenting the build oppia tests without caching s…
Rd4dev Jul 21, 2024
e0735a9
Re running attempt 6: with removing the kt suffix for test target que…
Rd4dev Jul 21, 2024
ede2c0b
Re run attempt 7 with bunch of random new line and print statments ju…
Rd4dev Jul 21, 2024
8946b06
Re run attempt 8: removing all print statements
Rd4dev Jul 21, 2024
3d78a86
Executing bazel command in 2 different ways for tests with shard conf…
Rd4dev Jul 21, 2024
5ea0739
Re run attempt 10; Printing the coverage command run with bazel test …
Rd4dev Jul 21, 2024
b266e48
Temporary reference point for handling multiple shard coverage data
Rd4dev Jul 22, 2024
15061ba
Adding workflow_run to trigger coverage workflow only when unit tests…
Rd4dev Jul 22, 2024
4e8198c
Re running the ci with workflow run removing quotes in the declaration
Rd4dev Jul 22, 2024
90db4f7
Recommenting the triggers that I uncommented unintentionally
Rd4dev Jul 22, 2024
8955775
Merge branch 'develop' of https://github.com/Rd4dev/oppia-android int…
Rd4dev Jul 24, 2024
10d9acd
Updated the sharedAndLocalTest case to sync in with updated multi tar…
Rd4dev Jul 24, 2024
77e0149
Resolved conflicts on sync with code_coverage_many_to_one_targets branch
Rd4dev Jul 24, 2024
e0d1afe
Clean up - Removed the Raw data path print statement
Rd4dev Jul 24, 2024
d0d72d1
Merge branch 'code_coverage_list_of_files' of https://github.com/oppi…
Rd4dev Jul 24, 2024
7443270
Adding external action wait for workflow action to trigger Coverage C…
Rd4dev Jul 24, 2024
77b060b
Halting the conditional triggering of coverage checks since external …
Rd4dev Jul 24, 2024
b800826
Removing the need for check unit tests completed job; left in previou…
Rd4dev Jul 24, 2024
9ad842f
Refactoring RetrieveChangedFiles and RetrieveChangedFilesTestTargets …
Rd4dev Jul 25, 2024
8eb748d
Updated the coverage workflow to utilize the combined retrieve change…
Rd4dev Jul 25, 2024
f73037c
Added missing import TimeUnit
Rd4dev Jul 25, 2024
fd1946e
Clean up of the coverage workflows and left over unused parts from re…
Rd4dev Jul 25, 2024
9a25964
Added a part of RetrieveChangedFilesTest test cases
Rd4dev Jul 25, 2024
9147df2
Clean up and Lint check fixes for KDoc missing functions
Rd4dev Jul 25, 2024
be8ff1c
Removing the mock data for multi target aggregation implementation
Rd4dev Jul 26, 2024
7d76b89
Added test cases for coverage data missing and retrieval failure cases
Rd4dev Jul 26, 2024
c2eddfb
Trigger Build since ExplorationActiveTimeControllerTest seems to fail
Rd4dev Jul 26, 2024
07e6fad
Syncing in with upstream many to one targets
Rd4dev Jul 27, 2024
5479330
Removing all the asynchronous calls to make it sequential
Rd4dev Jul 28, 2024
24390f5
Updated CoverageRunnerTest after sequential flow
Rd4dev Jul 28, 2024
ffe7768
Removed asynchronous flow in both source and test files for CoverageR…
Rd4dev Jul 28, 2024
8e88c35
Renaming the runWithCoverageAsync to runCoverageForTestTarget, update…
Rd4dev Jul 28, 2024
c1f012c
Trying to find the coverage path with regex pattern as they mismatch
Rd4dev Jul 29, 2024
aa0de7f
Save lobby before switching to a side branch to test permission error…
Rd4dev Jul 29, 2024
800ccda
Trying to hit a certain line n number of times in different ways yet …
Rd4dev Jul 29, 2024
ad611b8
Reverted changes with sample test data that were added for testing pu…
Rd4dev Jul 29, 2024
84c5336
Reverting the shard count to 4 which was introducing while testing
Rd4dev Jul 29, 2024
5561b4e
Merge branch 'develop' of https://github.com/Rd4dev/oppia-android int…
Rd4dev Jul 29, 2024
07184ee
Lint fixes for exceeding max line length
Rd4dev Jul 29, 2024
3974ce0
Fixes Missing Coverage Data Test Case
Rd4dev Jul 29, 2024
360dc4b
Fixed the retrieve coverage failure test case :) by reproducing the s…
Rd4dev Jul 30, 2024
565f2f5
Clean up and refactored the test cases
Rd4dev Jul 30, 2024
bd96fa3
Resolved conflict with upstream many to one targets merge
Rd4dev Jul 30, 2024
2e04f8a
Added functionality to also include source files of the test files to…
Rd4dev Jul 30, 2024
e6c506e
Isolated the sharedTest source File detection with test source File d…
Rd4dev Jul 30, 2024
0353897
Tiny clean up for finding the source file list
Rd4dev Jul 30, 2024
b749916
Added a new proto Coverage Report Container to hold all the coverage …
Rd4dev Jul 30, 2024
a35d7a0
Save lobby - Collecting protos into one coverage report container pro…
Rd4dev Jul 31, 2024
05a007b
Updating the coverage missing test case while removing the job and re…
Rd4dev Jul 31, 2024
a3a661e
Clean up and changed the test case names to be more specific on what …
Rd4dev Jul 31, 2024
8a12cf4
Added validation to ensure exactly one unique value of filePath and f…
Rd4dev Jul 31, 2024
e72179a
Clean up of aggreagation code and replaced conditional error statment…
Rd4dev Jul 31, 2024
f00ebc6
Removed the mock data used for coverage report with n:1 file target a…
Rd4dev Jul 31, 2024
2fa9737
Resolve merge conflicts with changes to upstream one to may targets b…
Rd4dev Jul 31, 2024
8b2415e
Hardcoded implementation of saving the protos to their own path
Rd4dev Jul 31, 2024
b0839ca
New proto structure for coverage to having distinct case for success …
Rd4dev Aug 1, 2024
d9ef7d8
Roughly organized layout / implementation of the flow of the protos a…
Rd4dev Aug 1, 2024
333607e
Re-writing the CoverageReporter script to handle the container proto …
Rd4dev Aug 1, 2024
b17e0d1
First set of cleanup with coverage reporter implemented
Rd4dev Aug 1, 2024
824c406
Reference point for mock data with new repeated bazel test target pro…
Rd4dev Aug 1, 2024
5ee99c0
Clean up and simplification of usage of single usage entry
Rd4dev Aug 1, 2024
372ae95
Fix lint checks and failing test case with update to the proto strucu…
Rd4dev Aug 1, 2024
6499311
Added missing import for BazelTestTarget
Rd4dev Aug 1, 2024
aa68b95
Final md report generation with failure, details - 1. failure below t…
Rd4dev Aug 2, 2024
5e0da59
Refactored CoverageReporter into unit functionalities and avoid repet…
Rd4dev Aug 2, 2024
bcb0bf2
Added parameter to save the proto to the path specified
Rd4dev Aug 2, 2024
8ff593f
Added Coverage Check Status that check through every fail and details…
Rd4dev Aug 2, 2024
9b2f0d8
Added a helper method to calculate coverage percentages
Rd4dev Aug 2, 2024
40b5f14
Updated tests for Coverage Runner Test
Rd4dev Aug 2, 2024
257e434
Added test case for CoverageReporter to test success detail, falure a…
Rd4dev Aug 2, 2024
a63a4d0
Added test case for CoverageReporter to test success detail, falure a…
Rd4dev Aug 2, 2024
edfd42d
Added combined success failure and exempted test file cases
Rd4dev Aug 2, 2024
91cd498
Updated RunCoverageTest test cases with new rewritten report implemen…
Rd4dev Aug 4, 2024
a4d5e58
Resolve merge conflicts with changes to upstream proto BazelTestTarge…
Rd4dev Aug 4, 2024
b41ad71
Fix lint checks indents and max line lengths
Rd4dev Aug 4, 2024
db74fee
Fix test with unresolved bazel test target list, added kdoc
Rd4dev Aug 4, 2024
d7ab04d
Fix failing test cases, lint checks indents, missing new lines and ma…
Rd4dev Aug 4, 2024
e5da141
Fix failing test with absence of trimEnd
Rd4dev Aug 4, 2024
c847231
Conditional new line additions; with next commits replace them with a…
Rd4dev Aug 4, 2024
2172905
Replaced appendLine with append to use \n in line
Rd4dev Aug 4, 2024
2ff0bda
Fix Tests with Failure cases and used the public const MIN_THRESHOLD …
Rd4dev Aug 4, 2024
61accfb
Kdoc checks and fix test with list of files
Rd4dev Aug 4, 2024
eef9618
Added Coverage Check Status to entire check and md report
Rd4dev Aug 4, 2024
aed8081
Refactored new lines in tests and added Coverage status to test templ…
Rd4dev Aug 4, 2024
4293d43
Fix failing tests with color codes and new line missing
Rd4dev Aug 5, 2024
d93762e
Updated test failure with appropriate failure type in test cases
Rd4dev Aug 5, 2024
75048d2
Fix failing test cases with missing new line
Rd4dev Aug 5, 2024
a294810
Bumping shard_count to 24 that got overriden with merge
Rd4dev Aug 5, 2024
d1ceedd
Added new tests with failing cases and new types of reports
Rd4dev Aug 5, 2024
464840c
Fix Lint check removed unused imports
Rd4dev Aug 5, 2024
7d875a9
Readding the shard count, removing while local testing
Rd4dev Aug 5, 2024
8c35412
Refactored log report to log only the failed coverage report to avoid…
Rd4dev Aug 5, 2024
d9358fd
Fixed Kdoc issues and redundant quotes
Rd4dev Aug 5, 2024
d4dc9fe
Resolve merge conflict with upstream list of files and modified alway…
Rd4dev Aug 5, 2024
e024b8f
Added remaining test target collection test cases for retrieveChangeF…
Rd4dev Aug 5, 2024
5ea6054
Introducing ComputeChangedFilesTest test file
Rd4dev Aug 5, 2024
267b1b3
Base test case setup to add a file as a changed file for computeChang…
Rd4dev Aug 6, 2024
12df19d
Added test cases for ComputeChangedFiles replicated exactly from the …
Rd4dev Aug 6, 2024
e20782c
Enable Functionality to compute on all available .kt source files
Rd4dev Aug 6, 2024
5e528fe
Merge branch 'develop' of https://github.com/Rd4dev/oppia-android int…
Rd4dev Aug 6, 2024
e72eec3
Added the copy of local and shared test to ensure the multiple test f…
Rd4dev Aug 6, 2024
49d2029
Resolve merge conflict with upstream RunCoverageTest
Rd4dev Aug 6, 2024
226f8b6
Added test to verify that the final container is saved to output prot…
Rd4dev Aug 6, 2024
223c266
Save lobby for proto extraction and storage
Rd4dev Aug 6, 2024
8aa42bb
Added test case to verify one single line hit my multiple targets of …
Rd4dev Aug 6, 2024
871a48e
Updated the Final coverage report template as suggested. This introdu…
Rd4dev Aug 7, 2024
2221bad
Updated tests with updated md template and fixed few review comments
Rd4dev Aug 7, 2024
c670ec3
Reverting the shard count change for ci run
Rd4dev Aug 7, 2024
45ee041
Resolve merge conflicts with upstream one to many targets :(
Rd4dev Aug 7, 2024
9b01b54
Save lobby while fixing tests as they take too long
Rd4dev Aug 7, 2024
2535777
Enabled and refactored compute changed files to have all files settin…
Rd4dev Aug 7, 2024
c6b45db
Remove unintended shard count
Rd4dev Aug 7, 2024
4e4c687
Cleaned up the BazelClient could be refactored more, will do after 1s…
Rd4dev Aug 7, 2024
87b45a9
Little clean with left debugging lines
Rd4dev Aug 7, 2024
30f3e97
Added test case with compute all file settings
Rd4dev Aug 8, 2024
e527dd9
Refactoring with test file exemption removal
Rd4dev Aug 8, 2024
2f11be3
Fixed test cases with Coverage Reporter and also added test cases cor…
Rd4dev Aug 8, 2024
667ed45
Fix failing test with CoverageRunnerTest due to incorrect target spec…
Rd4dev Aug 8, 2024
09277b6
Fixing test cases part 1 - md report template changes
Rd4dev Aug 8, 2024
0738388
Fix Lint checks majorly formattings
Rd4dev Aug 8, 2024
bdddfd5
Fix tests part 2 - exceptions and templates
Rd4dev Aug 8, 2024
9400e9e
Fix Tests part 3 - remove unnecessary lines
Rd4dev Aug 8, 2024
5d6b16b
Fix test after bumping min threshold to 70
Rd4dev Aug 8, 2024
0f3309c
Fix tests part 4 - with template and min threshold changes :|
Rd4dev Aug 8, 2024
ad5aa58
Fix Lint check Remove needless blank line
Rd4dev Aug 8, 2024
4ee8269
Updating with the upstream list of files
Rd4dev Aug 8, 2024
6aeda6b
Removing the logic to run test with args
Rd4dev Aug 8, 2024
71a9ce2
Bumping the processTimeout to 15 since the code coverage run failed w…
Rd4dev Aug 8, 2024
395a3b1
Fix Lint checks and re running ci to verify coverage pass
Rd4dev Aug 8, 2024
d8b9e6a
Removed the supress cases and comments
Rd4dev Aug 8, 2024
bec21b7
Bumping the process timeout straight in the RunCoverage to 35 and rem…
Rd4dev Aug 8, 2024
89dcd05
Trying to bump processTimeout in test
Rd4dev Aug 8, 2024
fed6a79
Brought in changes from the exempt-test-targets-incompatible-with-cod…
Rd4dev Aug 8, 2024
cec0f34
Changing the report format to proto for the ci runs and also bumping …
Rd4dev Aug 8, 2024
15b6d63
Resolved conflicts with upstream list of files
Rd4dev Aug 8, 2024
2274c0d
Fix Lint check missing space after =
Rd4dev Aug 8, 2024
d8d121e
Fix Lint check missing space after =
Rd4dev Aug 8, 2024
cba7a13
Triggering ci since many checks seem to fail after update
Rd4dev Aug 8, 2024
dad1370
Remove old implementation for collecting data
Rd4dev Aug 8, 2024
4462e12
Merge from upstream remove old implementation
Rd4dev Aug 8, 2024
83836bc
Fix failing test cases with changes from pull from exemptions pr
Rd4dev Aug 8, 2024
d1307c9
Added tests for BazelClient and Missing Build declarations inclusions
Rd4dev Aug 9, 2024
2639294
Fix Lint checks max line legth
Rd4dev Aug 9, 2024
013c951
Merge with develop branch
Rd4dev Aug 9, 2024
b8b70ed
Reordering the coverage output
Rd4dev Aug 9, 2024
743024d
Readjusted the bazel client test output
Rd4dev Aug 9, 2024
fa9cde0
Merge with latest upstream list of files
Rd4dev Aug 9, 2024
65419db
Removed unused instrumentation / path finder variables
Rd4dev Aug 9, 2024
0801ea5
Updated md template with replacing the file name links with the detai…
Rd4dev Aug 9, 2024
ac2f97e
Moved exempted list too to a details summary as they too might grow big
Rd4dev Aug 9, 2024
f951993
Updated tests to reflect changes in md report with replacement of lin…
Rd4dev Aug 9, 2024
fdf274a
Updated with suggested edits in the review
Rd4dev Aug 9, 2024
dc47fc6
Removed parsing of the pb file in the Coverage Reporter Test
Rd4dev Aug 9, 2024
bc7054b
Fix failing tests and lint checks
Rd4dev Aug 9, 2024
2d4b338
Fixed a flaky test, expected it to be since the order depends on the …
Rd4dev Aug 9, 2024
12e9f3e
Fix Lint check indentation
Rd4dev Aug 9, 2024
91f031f
Merge from upstream list of files branch
Rd4dev Aug 9, 2024
aed0c18
Mapping tests to targets right in the compute changed files
Rd4dev Aug 9, 2024
7c8dac9
Code cleanup the changes need verification in ci
Rd4dev Aug 9, 2024
f6460e3
Removed steps: git-secret, decrypt secrets and all with caching steps…
Rd4dev Aug 9, 2024
69256ea
Split instrumentation test cases and added test for non kt files checks
Rd4dev Aug 9, 2024
618a9ee
Updated test cases and added tests for non kotlin files
Rd4dev Aug 9, 2024
9b0c209
Updating tests to work on files that are committed and not just added…
Rd4dev Aug 9, 2024
48bc7f7
Fixed/Updated all the test cases with changes to the computing only t…
Rd4dev Aug 9, 2024
3eac085
Reverting the commented check unit test completed job to verify ci runs
Rd4dev Aug 9, 2024
28593b5
Merge and resolving with upstream after incompatible files are exempted
Rd4dev Aug 10, 2024
7949695
Resolve conflict with coverage BUILD
Rd4dev Aug 10, 2024
8839a01
Updated tests with source incompatible exemption changes
Rd4dev Aug 10, 2024
a970df2
Fix Tests after merging with upstream exemptions
Rd4dev Aug 10, 2024
ea1be84
Storing the protos to their respective file name paths and updated it…
Rd4dev Aug 10, 2024
fa85aa6
Fix tests with saving proto - yet to confirm test case with changes t…
Rd4dev Aug 10, 2024
3377795
Added log statement for md report path
Rd4dev Aug 10, 2024
aeaa8fc
Resolved merge conflict with upstream list of files
Rd4dev Aug 10, 2024
fe67c3a
Commented the dependency to unit test to test coverage runs after cac…
Rd4dev Aug 10, 2024
2709e46
Removing the need dependency for coverage workflow
Rd4dev Aug 10, 2024
7836bdc
Added test cases to cover the mapping of test to source file
Rd4dev Aug 10, 2024
9ee65c2
Fix upstream override of findTestFile args
Rd4dev Aug 10, 2024
73231c5
Fix failing test with additional message missing errors
Rd4dev Aug 10, 2024
f834919
Merge with upstream list of files after test fixes
Rd4dev Aug 10, 2024
7a8f32f
Fix failing tests with high Coverage Exemption
Rd4dev Aug 10, 2024
b89dfb9
Merge with upstream list of files
Rd4dev Aug 10, 2024
b655df7
Reverting the commented out check unit job
Rd4dev Aug 10, 2024
1d35054
Changing the proto to MD as keeping the proto would skip the coverage…
Rd4dev Aug 10, 2024
76da534
Removed unused Enable_caching variable
Rd4dev Aug 10, 2024
21773d0
Resolving conflict after list of files branch merge with develop
Rd4dev Aug 10, 2024
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
77 changes: 10 additions & 67 deletions .github/workflows/code_coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,19 @@ on:
- develop

jobs:
# check_unit_tests_completed:
# name: Check unit test completed
# runs-on: ubuntu-latest
# steps:
# - name: Wait for unit tests to checks
# uses: ArcticLampyrid/[email protected]
# with:
# workflow: unit_tests.yml
# sha: auto
check_unit_tests_completed:
name: Check unit test completed
runs-on: ubuntu-latest
steps:
- name: Wait for unit tests to checks
uses: ArcticLampyrid/[email protected]
with:
workflow: unit_tests.yml
sha: auto

compute_changed_files:
name: Compute changed files
# needs: check_unit_tests_completed
needs: check_unit_tests_completed
runs-on: ubuntu-20.04
outputs:
matrix: ${{ steps.compute-file-matrix.outputs.matrix }}
Expand Down Expand Up @@ -215,55 +215,6 @@ jobs:
echo "build --disk_cache=$EXPANDED_BAZEL_CACHE_PATH" >> $HOME/.bazelrc
shell: bash

# See explanation in bazel_build_app for how this is installed.
- name: Install git-secret (non-fork only)
if: ${{ env.ENABLE_CACHING == 'true' && ((github.ref == 'refs/heads/develop' && github.event_name == 'push') || (github.event.pull_request.head.repo.full_name == 'oppia/oppia-android')) }}
shell: bash
run: |
cd $HOME
mkdir -p $HOME/gitsecret
git clone https://github.com/sobolevn/git-secret.git git-secret
cd git-secret && make build
PREFIX="$HOME/gitsecret" make install
echo "$HOME/gitsecret" >> $GITHUB_PATH
echo "$HOME/gitsecret/bin" >> $GITHUB_PATH

- name: Decrypt secrets (non-fork only)
if: ${{ env.ENABLE_CACHING == 'true' && ((github.ref == 'refs/heads/develop' && github.event_name == 'push') || (github.event.pull_request.head.repo.full_name == 'oppia/oppia-android')) }}
env:
GIT_SECRET_GPG_PRIVATE_KEY: ${{ secrets.GIT_SECRET_GPG_PRIVATE_KEY }}
run: |
cd $HOME
# NOTE TO DEVELOPERS: Make sure to never print this key directly to stdout!
echo $GIT_SECRET_GPG_PRIVATE_KEY | base64 --decode > ./git_secret_private_key.gpg
gpg --import ./git_secret_private_key.gpg
cd $GITHUB_WORKSPACE
git secret reveal

# See https://www.cyberciti.biz/faq/unix-for-loop-1-to-10/ for for-loop reference.
- name: Build Oppia Tests (with caching, non-fork only)
if: ${{ env.ENABLE_CACHING == 'true' && ((github.ref == 'refs/heads/develop' && github.event_name == 'push') || (github.event.pull_request.head.repo.full_name == 'oppia/oppia-android')) }}
env:
BAZEL_REMOTE_CACHE_URL: ${{ secrets.BAZEL_REMOTE_CACHE_URL }}
BAZEL_TEST_TARGETS: ${{ env.BAZEL_TEST_TARGETS }}
run: |
# Attempt to build 5 times in case there are flaky builds.
# TODO(#3759): Remove this once there are no longer app test build failures.
i=0
# Disable exit-on-first-failure.
set +e
while [ $i -ne 5 ]; do
i=$(( $i+1 ))
echo "Attempt $i/5 to build test targets"
bazel build --keep_going --remote_http_cache=$BAZEL_REMOTE_CACHE_URL --google_credentials=./config/oppia-dev-workflow-remote-cache-credentials.json -- $BAZEL_TEST_TARGETS
done
# Capture the error code of the final command run (which should be a success if there isn't a real build failure).
last_error_code=$?
# Reenable exit-on-first-failure.
set -e
# Exit only if the most recent exit was a failure (by using a subshell).
(exit $last_error_code)

- name: Build Oppia Tests (without caching, or on a fork)
if: ${{ env.ENABLE_CACHING == 'false' || ((github.ref != 'refs/heads/develop' || github.event_name != 'push') && (github.event.pull_request.head.repo.full_name != 'oppia/oppia-android')) }}
env:
Expand All @@ -286,14 +237,6 @@ jobs:
# Exit only if the most recent exit was a failure (by using a subshell).
(exit $last_error_code)

- name: Run Oppia Coverage (with caching, non-fork only)
if: ${{ env.ENABLE_CACHING == 'true' && ((github.ref == 'refs/heads/develop' && github.event_name == 'push') || (github.event.pull_request.head.repo.full_name == 'oppia/oppia-android')) }}
env:
BAZEL_REMOTE_CACHE_URL: ${{ secrets.BAZEL_REMOTE_CACHE_URL }}
CHANGED_FILES: ${{ env.CHANGED_FILES }}
run: |
bazel run //scripts:run_coverage -- $(pwd) $CHANGED_FILES --format=PROTO --processTimeout=15

- name: Run Oppia Coverage (without caching, or on a fork)
if: ${{ env.ENABLE_CACHING == 'false' || ((github.ref != 'refs/heads/develop' || github.event_name != 'push') && (github.event.pull_request.head.repo.full_name != 'oppia/oppia-android')) }}
env:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,12 @@ class ComputeChangedFiles(
val currentBranch = gitClient.currentBranch.lowercase(Locale.US)
val changedFiles = if (computeAllFilesSetting || currentBranch == "develop") {
computeAllFiles(rootDirectory, pathToRoot)
} else computeChangedFilesForNonDevelopBranch(gitClient, rootDirectory)
} else computeChangedFilesForNonDevelopBranch(gitClient, rootDirectory, pathToRoot)

val ktFiles = changedFiles.filter { it.endsWith(".kt") }
val filteredFiles = filterFiles(ktFiles)
val filteredFiles = filterFiles(changedFiles)
println()
println("Changed Files:")
println(filteredFiles.joinToString(separator = "\n") { "- $it" })

val changedFileBuckets = bucketFiles(filteredFiles)
val encodedFileBucketEntries = changedFileBuckets
Expand Down Expand Up @@ -148,16 +150,31 @@ class ComputeChangedFiles(

private fun computeChangedFilesForNonDevelopBranch(
gitClient: GitClient,
rootDirectory: File
rootDirectory: File,
pathToRoot: String
): List<String> {
return gitClient.changedFiles
val changedKtFiles = gitClient.committedFiles
.map { File(rootDirectory, it) }
.filter { it.exists() }
.map { it.toRelativeString(rootDirectory) }
.filter { it.endsWith(".kt") }

return changedKtFiles
.map { changedKtFile ->
when {
changedKtFile.endsWith("Test.kt") -> {
mapTestFileToSourceFile(rootDirectory, pathToRoot, changedKtFile)
}
changedKtFile.endsWith(".kt") -> changedKtFile
else -> null
}
}
.filterNotNull()
.distinct()
}

private fun filterFiles(files: List<String>): List<String> {
// Filtering out files that need to be ignored.
// Filter out instrumentation files since code coverage only runs on unit tests.
return files.filter { file ->
!file
.startsWith(
Expand All @@ -167,6 +184,44 @@ class ComputeChangedFiles(
}
}

private fun mapTestFileToSourceFile(
rootDirectory: File,
repoRoot: String,
filePath: String
): String? {
val repoRootFile = File(repoRoot).absoluteFile

val possibleSourceFilePaths = when {
filePath.startsWith("scripts/") -> {
listOf(filePath.replace("/javatests/", "/java/").replace("Test.kt", ".kt"))
}
filePath.startsWith("app/") -> {
when {
filePath.contains("/sharedTest/") -> {
listOf(filePath.replace("/sharedTest/", "/main/").replace("Test.kt", ".kt"))
}
filePath.contains("/test/") -> {
listOf(
filePath.replace("/test/", "/main/").replace("Test.kt", ".kt"),
filePath.replace("/test/", "/main/").replace("LocalTest.kt", ".kt")
)
}
else -> emptyList()
}
}
else -> {
listOf(filePath.replace("/test/", "/main/").replace("Test.kt", ".kt"))
}
BenHenning marked this conversation as resolved.
Show resolved Hide resolved
}

return possibleSourceFilePaths
.mapNotNull { path ->
val file = File(repoRootFile, path)
file.takeIf { it.exists() }?.toRelativeString(rootDirectory)
}
.firstOrNull()
}

private fun bucketFiles(filteredFiles: List<String>): List<ChangedFilesBucket> {
val groupedBuckets = filteredFiles.groupBy { FileBucket.retrieveCorrespondingFileBucket(it) }
.entries.groupBy(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ class GitClient(
*/
val changedFiles: Set<String> by lazy { retrieveChangedFilesWithPotentialDuplicates().toSet() }

/** The list of files that have been committed in the local branch. */
val committedFiles: List<String> by lazy { retrieveChangedCommittedFiles() }

private fun retrieveCurrentCommit(): String {
return executeGitCommandWithOneLineOutput("rev-parse HEAD")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,7 +253,7 @@ class CoverageReporter(
report.failure?.let { failure ->
val failurePath = failure.filePath
?.takeIf { it.isNotEmpty() }
?.let { getFilenameAsLink(it) }
?.let { getFilenameAsDetailsSummary(it) }
?: failure.bazelTestTarget
"| $failurePath | ${failure.failureMessage} |"
}
Expand Down Expand Up @@ -315,8 +315,8 @@ class CoverageReporter(
.filter { it.hasExemption() }
.map { exemption ->
val filePath = exemption.exemption.filePath
"${getFilenameAsLink(filePath)}"
}.joinToString(separator = "\n") { "- $it" }
"${getFilenameAsDetailsSummary(filePath)}"
}.joinToString(separator = "\n") { "$it" }

val tableHeader = buildString {
append("| File | Coverage | Lines Hit | Status | Min Required |\n")
Expand Down Expand Up @@ -394,8 +394,10 @@ class CoverageReporter(
val testFileExemptedSection = buildString {
if (testFileExemptedCasesList.isNotEmpty()) {
append("\n\n")
append("### Files Exempted from Coverage\n")
append("### Exempted coverage\n")
append("<details><summary>Files exempted from coverage</summary> <br>")
append(testFileExemptedCasesList)
append("</details>")
}
}

Expand Down Expand Up @@ -444,19 +446,10 @@ class CoverageReporter(
}

private fun calculateOverallCoveragePercentage(): Float {
var totalLinesFound = 0
var totalLinesHit = 0

coverageReportContainer.coverageReportList.forEach { report ->
report.details?.let {
totalLinesFound += it.linesFound
totalLinesHit += it.linesHit
}
}

return totalLinesFound.takeIf { it > 0 }
?.let { totalLinesHit.toFloat() / it * 100 }
?: 0.0f
val reports = coverageReportContainer.coverageReportList
val totalLinesFound = reports.sumOf { it.details?.linesFound ?: 0 }.toFloat()
val totalLinesHit = reports.sumOf { it.details?.linesHit ?: 0 }.toFloat()
return if (totalLinesFound > 0) (totalLinesHit * 100.0f) / totalLinesFound else 0.0f
}

private fun logCoverageReport() {
Expand Down Expand Up @@ -494,12 +487,13 @@ class CoverageReporter(
}

if (coveragePercentage < minRequiredCoverage) {
val exemptionText = exemption?.let { "(exemption)" } ?: ""
failureReports.appendLine(
"""
|Covered File: $filePath
|Coverage percentage: $formattedCoveragePercentage% covered
|Line coverage: $totalLinesHit / $totalLinesFound lines covered
|Minimum Required: $minRequiredCoverage% "${exemption?.let { "(exemption)" } ?: ""}"
|Minimum Required: $minRequiredCoverage% $exemptionText
|------------------------
""".trimMargin().prependIndent(" ")
)
Expand Down Expand Up @@ -539,7 +533,7 @@ class CoverageReporter(
)
val formattedCoveragePercentage = "%.2f".format(coveragePercentage)

"| ${getFilenameAsLink(filePath)} | $formattedCoveragePercentage% | " +
"| ${getFilenameAsDetailsSummary(filePath)} | $formattedCoveragePercentage% | " +
"$totalLinesHit / $totalLinesFound | $statusSymbol | $exemptionPercentage |"
}
.joinToString(separator = "\n")
Expand Down Expand Up @@ -583,9 +577,6 @@ private fun getReportOutputPath(
return "$repoRoot/coverage_reports/$fileWithoutExtension/$defaultFilename"
}

private fun getFilenameAsLink(filePath: String): String {
val oppiaDevelopGitHubLink = "https://github.com/oppia/oppia-android/tree/develop"
val filename = filePath.substringAfterLast("/").trim()
val filenameAsLink = "[$filename]($oppiaDevelopGitHubLink/$filePath)"
return filenameAsLink
private fun getFilenameAsDetailsSummary(filePath: String): String {
return "<details><summary>${filePath.substringAfterLast("/")}</summary>$filePath</details>"
}
Original file line number Diff line number Diff line change
Expand Up @@ -40,16 +40,14 @@ class CoverageRunner(
val coverageResults = bazelClient.runCoverageForTestTarget(bazelTestTarget)

return coverageResults
.takeIf { it.isNotEmpty() }
?.map { singleCoverageDatFileLines ->
.map { singleCoverageDatFileLines ->
parseCoverageDataFileLines(singleCoverageDatFileLines, bazelTestTarget)
}
?: listOf(
generateFailedCoverageReport(
bazelTestTarget,
"Coverage retrieval failed for the test target: $bazelTestTarget"
)
}.takeIf { it.isNotEmpty() } ?: listOf(
generateFailedCoverageReport(
bazelTestTarget,
"Coverage retrieval failed for the test target: $bazelTestTarget"
)
)
}

private fun parseCoverageDataFileLines(
Expand Down
Loading
Loading