-
Notifications
You must be signed in to change notification settings - Fork 528
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
[RunAllTests] Fix #3752: Introduce Bazel test batching in CI #3757
Conversation
This is needed to open a PR on GitHub. This commit is being made so that the PR can start off in a broken Actions state. This also initially disables most non-Bazel workflows to make workflow iteration faster and less impacting on other team members.
Initial failure state: https://github.com/oppia/oppia-android/actions/runs/1191450690. |
This introduces a new mechanism for passing lists of tests to sharded test targets in CI, and hooks it up. No actual sharding is occurring yet. This led to some simplifications in the CI workflow since the script can be more dynamic in computing the full list of targets (which also works around a previous bug with instrumentation tests being run). Java proto lite also needed to be upgraded for the scripts to be able to use it. More testing/documentation needed as this functionality continues to expand.
This simply partitions bucketed groups of targets into chunks of 10 for each run. Only 3 buckets are currently retained to test sharding in CI before introducing full support.
Fixes some caching bucket and output bugs. Also, introduces while loop & keep_going to introduce resilience against app test build failures (or just test failures in general).
Also, enable other workflows. Note that CI shouldn't fully pass yet since some documentation and testing needs to be added yet, but this is meant to be a more realistic test of the CI environment before the PR is finished.
This mid-sharding strategy is demonstrating excellent throughput; the Bazel tests almost ran as fast as the app module Gradle tests despite being more tests overall & generally slower when compared with Gradle. I'm going to see if we can calibrate the shards with some slight heuristics to get even better throughput. |
Adds a human-readable prefix to make the shards look a bit nicer. Also, adds more fine-tuned partitioning to bucket & reduce shard counts to improve overall timing. Will need to be tested in CI.
A newly computed variable wasn't updated to be used in an earlier change.
NB: latest runtime for this case was 30 minutes for the full Bazel test suite (which suggests a lot of caching going on). That actually beats Gradle outright by a pretty large margin (usually app tests on Gradle take 40+ minutes). |
Hmm. I actually think that this might a viable point to mark Bazel tests as required now. Let's see how this PR lands over the next week for practical usage, but if it behaves as well as we're seeing here then we probably don't even need to bother waiting for modularization to mark these workflows as required. |
Add docstrings for proto.
I'm fairly confident in this latest run passing, so sending into review now & merging downstream to unblock #3750. |
@vinitamurthi @FareesHussain @anandwana001 this PR doesn't actually require any codeowner approvals, but I'd like your thoughts on the approach & implementation. PTAL. |
Another thought: given that this reduces the shard load by 20x on GitHub, I think we could also consider changing the runtime rate to 10 max concurrent instead of 5. We're less likely to exceed our quota with fewer overall shards, and even if we hit it when a lot of concurrent PRs are being developed the cost to wait is way lower since each workflow comprises ~8% of the overall test runtime vs. ~0.4%. That will also result in the overall test suite completing in closer to 15-20 minutes which puts us back to pre-slow-down-Gradle days in early 2020 in terms of CI performance. |
Latest Bazel run (with 10 max concurrent runs): 18 minutes. |
I'm traveling rn, I'll review this tomorrow |
@vinitamurthi @anandwana001 @FareesHussain friendly ping. |
Unassigning @vinitamurthi since they have already approved the PR. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
@FareesHussain is away, so let's merge this. |
…, Proguard, and build flavors (#3750) * Add support for AABs, build flavors, and proguard. There are a lot of details to cover here--see the PR for the complete context. * Lint & codeowner fixes. * Fix failures. - Add missing codeowner - Add support for configuring base branch reference - Update CI for dev/alpha AAB builds to use 'develop' since there's no origin configured by default in the workflows * Different attempt to fix bad develop reference in CI. * Initial commit. This is needed to open a PR on GitHub. This commit is being made so that the PR can start off in a broken Actions state. This also initially disables most non-Bazel workflows to make workflow iteration faster and less impacting on other team members. * Introduce infrastructure for batching. This introduces a new mechanism for passing lists of tests to sharded test targets in CI, and hooks it up. No actual sharding is occurring yet. This led to some simplifications in the CI workflow since the script can be more dynamic in computing the full list of targets (which also works around a previous bug with instrumentation tests being run). Java proto lite also needed to be upgraded for the scripts to be able to use it. More testing/documentation needed as this functionality continues to expand. * Add bucketing strategy. This simply partitions bucketed groups of targets into chunks of 10 for each run. Only 3 buckets are currently retained to test sharding in CI before introducing full support. * Fix caching & stabilize builds. Fixes some caching bucket and output bugs. Also, introduces while loop & keep_going to introduce resilience against app test build failures (or just test failures in general). * Increase sharding & add randomization. Also, enable other workflows. Note that CI shouldn't fully pass yet since some documentation and testing needs to be added yet, but this is meant to be a more realistic test of the CI environment before the PR is finished. * Improving partitionin & readability. Adds a human-readable prefix to make the shards look a bit nicer. Also, adds more fine-tuned partitioning to bucket & reduce shard counts to improve overall timing. Will need to be tested in CI. * Add new tests & fix static analysis errors. * Fix script. A newly computed variable wasn't updated to be used in an earlier change. * Fix broken tests & test configuration. Add docstrings for proto. * Fix mistake from earlier commit. * Try 10 max parallel actions instead. See #3757 (comment) for context. * Fix another error from an earlier commit. * Fix mv command so it works on Linux & OSX. Neither 'mv -t' nor piping to mv work on OSX so we needed to find an alternative (in this case just trying to move everything). This actually works a bit better since it's doing a per-file move rather than accommodating for files that shouldn't be moved (which isn't an issue since the destination directory is different than the one containing the AAB file).
…app & content string translations (#3794) * Add support for AABs, build flavors, and proguard. There are a lot of details to cover here--see the PR for the complete context. * Lint & codeowner fixes. * Fix failures. - Add missing codeowner - Add support for configuring base branch reference - Update CI for dev/alpha AAB builds to use 'develop' since there's no origin configured by default in the workflows * Different attempt to fix bad develop reference in CI. * Initial commit. This is needed to open a PR on GitHub. This commit is being made so that the PR can start off in a broken Actions state. This also initially disables most non-Bazel workflows to make workflow iteration faster and less impacting on other team members. * Introduce infrastructure for batching. This introduces a new mechanism for passing lists of tests to sharded test targets in CI, and hooks it up. No actual sharding is occurring yet. This led to some simplifications in the CI workflow since the script can be more dynamic in computing the full list of targets (which also works around a previous bug with instrumentation tests being run). Java proto lite also needed to be upgraded for the scripts to be able to use it. More testing/documentation needed as this functionality continues to expand. * Add bucketing strategy. This simply partitions bucketed groups of targets into chunks of 10 for each run. Only 3 buckets are currently retained to test sharding in CI before introducing full support. * Fix caching & stabilize builds. Fixes some caching bucket and output bugs. Also, introduces while loop & keep_going to introduce resilience against app test build failures (or just test failures in general). * Increase sharding & add randomization. Also, enable other workflows. Note that CI shouldn't fully pass yet since some documentation and testing needs to be added yet, but this is meant to be a more realistic test of the CI environment before the PR is finished. * Improving partitionin & readability. Adds a human-readable prefix to make the shards look a bit nicer. Also, adds more fine-tuned partitioning to bucket & reduce shard counts to improve overall timing. Will need to be tested in CI. * Add new tests & fix static analysis errors. * Fix script. A newly computed variable wasn't updated to be used in an earlier change. * Fix broken tests & test configuration. Add docstrings for proto. * Fix mistake from earlier commit. * Try 10 max parallel actions instead. See #3757 (comment) for context. * Fix another error from an earlier commit. * Localisation updates from https://translatewiki.net. * Fix mv command so it works on Linux & OSX. Neither 'mv -t' nor piping to mv work on OSX so we needed to find an alternative (in this case just trying to move everything). This actually works a bit better since it's doing a per-file move rather than accommodating for files that shouldn't be moved (which isn't an issue since the destination directory is different than the one containing the AAB file). * Introduce initial domain layer for translations. Documentation, thorough tests, and detailed description of these changes are still needed. * Domain changes needed per downstream UI changes. * Add needed domain changes for downstream branch. Also includes fixing circular dependency issue by splitting out some of the locale components to be part of utility rather than domain (so that utiltiy and other packages can depend on MachineLocale). * Fix regex checks for translated strings. Also, performance improvements for the regex check. * Lint-ish fix. * Add check for nested res subdirectories. * Clean up locale infra. Add some other needed functionality. * Attempt to delete strings to force history. * Make AAB builds/runs manual-only targets. * Fix broken tests. * Fix lint issues & add KDocs. Also, abstract ContentLocale for consistency & to disallow direct construction. * Add 6/11 test suites (& placeholders for other 4). Silence one file missing a test suite (since it doesn't need one). Also, some tweaks to the language support definitions. * Add more test suites for domain layers. Included introducing a new general purpose utility for testing data providers + its own test suite. * Introduce wrapper & fake for bidi wrapping. Also, add test version of AssetRepository. Add new placeholder tests & update all tests project-wide to make sure that they build. * Add remaining tests. Included some shadow refactoring, and introducing new test-only resources. * Fix Gradle builds. * Lint fixes. * Resolve remaining incomplete TODOs. * Add new codeowners. * Two fixes. 1. Introduce proper API compatibility for LocaleController 2. Ensure TranslationController is scoped (breaks test in downstream PR) Co-authored-by: translatewiki.net <[email protected]>
…g language selection support (#3795) * Add support for AABs, build flavors, and proguard. There are a lot of details to cover here--see the PR for the complete context. * Lint & codeowner fixes. * Fix failures. - Add missing codeowner - Add support for configuring base branch reference - Update CI for dev/alpha AAB builds to use 'develop' since there's no origin configured by default in the workflows * Different attempt to fix bad develop reference in CI. * Initial commit. This is needed to open a PR on GitHub. This commit is being made so that the PR can start off in a broken Actions state. This also initially disables most non-Bazel workflows to make workflow iteration faster and less impacting on other team members. * Introduce infrastructure for batching. This introduces a new mechanism for passing lists of tests to sharded test targets in CI, and hooks it up. No actual sharding is occurring yet. This led to some simplifications in the CI workflow since the script can be more dynamic in computing the full list of targets (which also works around a previous bug with instrumentation tests being run). Java proto lite also needed to be upgraded for the scripts to be able to use it. More testing/documentation needed as this functionality continues to expand. * Add bucketing strategy. This simply partitions bucketed groups of targets into chunks of 10 for each run. Only 3 buckets are currently retained to test sharding in CI before introducing full support. * Fix caching & stabilize builds. Fixes some caching bucket and output bugs. Also, introduces while loop & keep_going to introduce resilience against app test build failures (or just test failures in general). * Increase sharding & add randomization. Also, enable other workflows. Note that CI shouldn't fully pass yet since some documentation and testing needs to be added yet, but this is meant to be a more realistic test of the CI environment before the PR is finished. * Improving partitionin & readability. Adds a human-readable prefix to make the shards look a bit nicer. Also, adds more fine-tuned partitioning to bucket & reduce shard counts to improve overall timing. Will need to be tested in CI. * Add new tests & fix static analysis errors. * Fix script. A newly computed variable wasn't updated to be used in an earlier change. * Fix broken tests & test configuration. Add docstrings for proto. * Fix mistake from earlier commit. * Try 10 max parallel actions instead. See #3757 (comment) for context. * Fix another error from an earlier commit. * Localisation updates from https://translatewiki.net. * Fix mv command so it works on Linux & OSX. Neither 'mv -t' nor piping to mv work on OSX so we needed to find an alternative (in this case just trying to move everything). This actually works a bit better since it's doing a per-file move rather than accommodating for files that shouldn't be moved (which isn't an issue since the destination directory is different than the one containing the AAB file). * Introduce initial domain layer for translations. Documentation, thorough tests, and detailed description of these changes are still needed. * Initial app layer implementation for translations. This demonstrates working string selection for system-based and overwritten app languages, including necessary activity recreation & layout direction overwriting. This also includes a bunch of Dagger infra refactoring so that some app layer packages can now be modularized (including the new packages). * Domain changes needed per downstream UI changes. * Add patterns & fixes. This involves MANY broad changes to ensure consistent string retrieval (for arrays and plurals), formatting, and string transformations throughout the codebase. Some extra patterns to added to fix things that were needed, and a few issues were fixed along the way. * Add needed domain changes for downstream branch. Also includes fixing circular dependency issue by splitting out some of the locale components to be part of utility rather than domain (so that utiltiy and other packages can depend on MachineLocale). * Fix regex checks for translated strings. Also, performance improvements for the regex check. * Lint-ish fix. * Fix failing regex checks. * Add check for nested res subdirectories. * Clean up locale infra. Add some other needed functionality. * Attempt to delete strings to force history. * Make AAB builds/runs manual-only targets. * Fix broken tests. * Fix lint issues & add KDocs. Also, abstract ContentLocale for consistency & to disallow direct construction. * Add 6/11 test suites (& placeholders for other 4). Silence one file missing a test suite (since it doesn't need one). Also, some tweaks to the language support definitions. * Add more test suites for domain layers. Included introducing a new general purpose utility for testing data providers + its own test suite. * Introduce wrapper & fake for bidi wrapping. Also, add test version of AssetRepository. Add new placeholder tests & update all tests project-wide to make sure that they build. * Add remaining tests. Included some shadow refactoring, and introducing new test-only resources. * Fix Gradle builds. * Lint fixes. * Resolve remaining incomplete TODOs. * Add new codeowners. * Post-merge fixes. Make all non-app layer targets build (haven't run tests yet). Audited existing bidi wrapping cases & converted strings over to being %s-only. * Fix most test targets (builds). All non-app tests confirmed as passing. * Fix all remaining test builds. Introduce new TestActivity for scaffolding all non-activity tests. * Fix all app layer tests. Add fixes for question player & old answer displaying. Add fix for guaranteed crash on startup after some changes between now & the first build of MR3 (dueu to extra updates in SplashActivityPresenter). * Fix questions & profile issues. * Type specifier pattern & fixes. Address temporary TODO by removing kdoc. * Add missing KDocs. * Boilerplate & TODOs for needed tests. * Add new needed test dep. Required an update to truth proto lite import (due to an incompatible update in the common Truth dep). * Add needed testing coverage. Other miscellaneous fixes needed to support new tests. * Two fixes. 1. Introduce proper API compatibility for LocaleController 2. Ensure TranslationController is scoped (breaks test in downstream PR) * Fix Gradle builds on branch. * Resolve nearly all pending TODOs. Only remainder is a test suite whose tests need to be migrated. * Lint fixes. * Fix failures found on CI. * Fix remaining Gradle failures found in CI. * Post-merge fix. * Gradle Espresso test fix. * Deflake DataProviderTestMonitorTest. * Address reviewer comments. * Lint fixes. Co-authored-by: translatewiki.net <[email protected]>
…or localizing lesson content & multi-lingual answer submission (#3796) * Add support for AABs, build flavors, and proguard. There are a lot of details to cover here--see the PR for the complete context. * Lint & codeowner fixes. * Fix failures. - Add missing codeowner - Add support for configuring base branch reference - Update CI for dev/alpha AAB builds to use 'develop' since there's no origin configured by default in the workflows * Different attempt to fix bad develop reference in CI. * Initial commit. This is needed to open a PR on GitHub. This commit is being made so that the PR can start off in a broken Actions state. This also initially disables most non-Bazel workflows to make workflow iteration faster and less impacting on other team members. * Introduce infrastructure for batching. This introduces a new mechanism for passing lists of tests to sharded test targets in CI, and hooks it up. No actual sharding is occurring yet. This led to some simplifications in the CI workflow since the script can be more dynamic in computing the full list of targets (which also works around a previous bug with instrumentation tests being run). Java proto lite also needed to be upgraded for the scripts to be able to use it. More testing/documentation needed as this functionality continues to expand. * Add bucketing strategy. This simply partitions bucketed groups of targets into chunks of 10 for each run. Only 3 buckets are currently retained to test sharding in CI before introducing full support. * Fix caching & stabilize builds. Fixes some caching bucket and output bugs. Also, introduces while loop & keep_going to introduce resilience against app test build failures (or just test failures in general). * Increase sharding & add randomization. Also, enable other workflows. Note that CI shouldn't fully pass yet since some documentation and testing needs to be added yet, but this is meant to be a more realistic test of the CI environment before the PR is finished. * Improving partitionin & readability. Adds a human-readable prefix to make the shards look a bit nicer. Also, adds more fine-tuned partitioning to bucket & reduce shard counts to improve overall timing. Will need to be tested in CI. * Add new tests & fix static analysis errors. * Fix script. A newly computed variable wasn't updated to be used in an earlier change. * Fix broken tests & test configuration. Add docstrings for proto. * Fix mistake from earlier commit. * Try 10 max parallel actions instead. See #3757 (comment) for context. * Fix another error from an earlier commit. * Localisation updates from https://translatewiki.net. * Fix mv command so it works on Linux & OSX. Neither 'mv -t' nor piping to mv work on OSX so we needed to find an alternative (in this case just trying to move everything). This actually works a bit better since it's doing a per-file move rather than accommodating for files that shouldn't be moved (which isn't an issue since the destination directory is different than the one containing the AAB file). * Introduce initial domain layer for translations. Documentation, thorough tests, and detailed description of these changes are still needed. * Initial app layer implementation for translations. This demonstrates working string selection for system-based and overwritten app languages, including necessary activity recreation & layout direction overwriting. This also includes a bunch of Dagger infra refactoring so that some app layer packages can now be modularized (including the new packages). * Domain changes needed per downstream UI changes. * Add patterns & fixes. This involves MANY broad changes to ensure consistent string retrieval (for arrays and plurals), formatting, and string transformations throughout the codebase. Some extra patterns to added to fix things that were needed, and a few issues were fixed along the way. * Add needed domain changes for downstream branch. Also includes fixing circular dependency issue by splitting out some of the locale components to be part of utility rather than domain (so that utiltiy and other packages can depend on MachineLocale). * Introduce support for content localization. This includes a bunch of stuff that'll be described in more detail in the PR description, but it essentially: - Adds support for displaying content in explorations, questions, concept cards, and revision cards in a non-English language - Adds support for submitting non-English answers - Updates test structures to validate everything exception questions is working for localization * Fix structures to work with parsing assumptions. * Fix regex checks for translated strings. Also, performance improvements for the regex check. * Lint-ish fix. * Fix failing regex checks. * Add check for nested res subdirectories. * Clean up locale infra. Add some other needed functionality. * Attempt to delete strings to force history. * Make AAB builds/runs manual-only targets. * Fix broken tests. * Fix lint issues & add KDocs. Also, abstract ContentLocale for consistency & to disallow direct construction. * Add 6/11 test suites (& placeholders for other 4). Silence one file missing a test suite (since it doesn't need one). Also, some tweaks to the language support definitions. * Add more test suites for domain layers. Included introducing a new general purpose utility for testing data providers + its own test suite. * Introduce wrapper & fake for bidi wrapping. Also, add test version of AssetRepository. Add new placeholder tests & update all tests project-wide to make sure that they build. * Add remaining tests. Included some shadow refactoring, and introducing new test-only resources. * Fix Gradle builds. * Lint fixes. * Resolve remaining incomplete TODOs. * Add new codeowners. * Post-merge fixes. Make all non-app layer targets build (haven't run tests yet). Audited existing bidi wrapping cases & converted strings over to being %s-only. * Fix most test targets (builds). All non-app tests confirmed as passing. * Fix all remaining test builds. Introduce new TestActivity for scaffolding all non-activity tests. * Fix all app layer tests. Add fixes for question player & old answer displaying. Add fix for guaranteed crash on startup after some changes between now & the first build of MR3 (dueu to extra updates in SplashActivityPresenter). * Fix questions & profile issues. * Type specifier pattern & fixes. Address temporary TODO by removing kdoc. * Add missing KDocs. * Boilerplate & TODOs for needed tests. * Add new needed test dep. Required an update to truth proto lite import (due to an incompatible update in the common Truth dep). * Add needed testing coverage. Other miscellaneous fixes needed to support new tests. * Two fixes. 1. Introduce proper API compatibility for LocaleController 2. Ensure TranslationController is scoped (breaks test in downstream PR) * Fix Gradle builds on branch. * Resolve nearly all pending TODOs. Only remainder is a test suite whose tests need to be migrated. * Lint fixes. * Re-add method removed from merge. * Lint fixes. This also fixes broken extra/unused imports from the merge. Verified that the dev build works as of this commit. Haven't verified anything else. * Fix compute affected tests script. Adds support for very large PR changesets. * Fix failures found on CI. * Fix remaining Gradle failures found in CI. * Fix existing domain + app layer tests. Some reworking was needed in QuestionAssessmentProgressControllerTest. * Post-merge fix. * Gradle Espresso test fix. * Add missing KDocs, remove extra file, and other cleanups. * Lint fixes. * Deflake DataProviderTestMonitorTest. * Address reviewer comments. * Lint fixes. * Fix affected tests from earlier changes. These failures were found from CI test workflows. * Fix remaining Gradle failures. This introduces a proper fallback mechanism for content strings that allows Gradle builds & tests to work properly, and adds more robustness in case misconfigurations actually happen. * Add placeholders for new needed tests. * Fix broken tests. This came from the earlier commit's fix--the suite hadn't been updated. * Add needed tests for new behaviors. * Fix Gradle build & mechanism change failures. * Lint fixes. * Undo inadvertent change to Gradle jvmargs. * Disable most tests on Espresso. * Test fixes + make monitor Espresso-compatible. * Lint fixes. Co-authored-by: translatewiki.net <[email protected]>
…patterns, and other miscellaneous alpha MR3 fixes (#3797) * Add support for AABs, build flavors, and proguard. There are a lot of details to cover here--see the PR for the complete context. * Lint & codeowner fixes. * Fix failures. - Add missing codeowner - Add support for configuring base branch reference - Update CI for dev/alpha AAB builds to use 'develop' since there's no origin configured by default in the workflows * Different attempt to fix bad develop reference in CI. * Initial commit. This is needed to open a PR on GitHub. This commit is being made so that the PR can start off in a broken Actions state. This also initially disables most non-Bazel workflows to make workflow iteration faster and less impacting on other team members. * Introduce infrastructure for batching. This introduces a new mechanism for passing lists of tests to sharded test targets in CI, and hooks it up. No actual sharding is occurring yet. This led to some simplifications in the CI workflow since the script can be more dynamic in computing the full list of targets (which also works around a previous bug with instrumentation tests being run). Java proto lite also needed to be upgraded for the scripts to be able to use it. More testing/documentation needed as this functionality continues to expand. * Add bucketing strategy. This simply partitions bucketed groups of targets into chunks of 10 for each run. Only 3 buckets are currently retained to test sharding in CI before introducing full support. * Fix caching & stabilize builds. Fixes some caching bucket and output bugs. Also, introduces while loop & keep_going to introduce resilience against app test build failures (or just test failures in general). * Increase sharding & add randomization. Also, enable other workflows. Note that CI shouldn't fully pass yet since some documentation and testing needs to be added yet, but this is meant to be a more realistic test of the CI environment before the PR is finished. * Improving partitionin & readability. Adds a human-readable prefix to make the shards look a bit nicer. Also, adds more fine-tuned partitioning to bucket & reduce shard counts to improve overall timing. Will need to be tested in CI. * Add new tests & fix static analysis errors. * Fix script. A newly computed variable wasn't updated to be used in an earlier change. * Fix broken tests & test configuration. Add docstrings for proto. * Fix mistake from earlier commit. * Try 10 max parallel actions instead. See #3757 (comment) for context. * Fix another error from an earlier commit. * Localisation updates from https://translatewiki.net. * Fix mv command so it works on Linux & OSX. Neither 'mv -t' nor piping to mv work on OSX so we needed to find an alternative (in this case just trying to move everything). This actually works a bit better since it's doing a per-file move rather than accommodating for files that shouldn't be moved (which isn't an issue since the destination directory is different than the one containing the AAB file). * Introduce initial domain layer for translations. Documentation, thorough tests, and detailed description of these changes are still needed. * Initial app layer implementation for translations. This demonstrates working string selection for system-based and overwritten app languages, including necessary activity recreation & layout direction overwriting. This also includes a bunch of Dagger infra refactoring so that some app layer packages can now be modularized (including the new packages). * Domain changes needed per downstream UI changes. * Add patterns & fixes. This involves MANY broad changes to ensure consistent string retrieval (for arrays and plurals), formatting, and string transformations throughout the codebase. Some extra patterns to added to fix things that were needed, and a few issues were fixed along the way. * Add needed domain changes for downstream branch. Also includes fixing circular dependency issue by splitting out some of the locale components to be part of utility rather than domain (so that utiltiy and other packages can depend on MachineLocale). * Introduce support for content localization. This includes a bunch of stuff that'll be described in more detail in the PR description, but it essentially: - Adds support for displaying content in explorations, questions, concept cards, and revision cards in a non-English language - Adds support for submitting non-English answers - Updates test structures to validate everything exception questions is working for localization * Fix structures to work with parsing assumptions. * Fix regex checks for translated strings. Also, performance improvements for the regex check. * Lint-ish fix. * Fix failing regex checks. * Add check for nested res subdirectories. * Add remaining regex patterns & fixes. * Clean up locale infra. Add some other needed functionality. * Attempt to delete strings to force history. * Gate options behind compile-time flag. Flag status is off by default until #52 is finished. * Proguard fixes for Glide. Update version code since 6 & 7 were shipped. * Make AAB builds/runs manual-only targets. * Fix broken tests. * Fix lint issues & add KDocs. Also, abstract ContentLocale for consistency & to disallow direct construction. * Add 6/11 test suites (& placeholders for other 4). Silence one file missing a test suite (since it doesn't need one). Also, some tweaks to the language support definitions. * Add more test suites for domain layers. Included introducing a new general purpose utility for testing data providers + its own test suite. * Introduce wrapper & fake for bidi wrapping. Also, add test version of AssetRepository. Add new placeholder tests & update all tests project-wide to make sure that they build. * Add remaining tests. Included some shadow refactoring, and introducing new test-only resources. * Fix Gradle builds. * Lint fixes. * Resolve remaining incomplete TODOs. * Add new codeowners. * Post-merge fixes. Make all non-app layer targets build (haven't run tests yet). Audited existing bidi wrapping cases & converted strings over to being %s-only. * Fix most test targets (builds). All non-app tests confirmed as passing. * Fix all remaining test builds. Introduce new TestActivity for scaffolding all non-activity tests. * Fix all app layer tests. Add fixes for question player & old answer displaying. Add fix for guaranteed crash on startup after some changes between now & the first build of MR3 (dueu to extra updates in SplashActivityPresenter). * Fix questions & profile issues. * Type specifier pattern & fixes. Address temporary TODO by removing kdoc. * Add missing KDocs. * Boilerplate & TODOs for needed tests. * Add new needed test dep. Required an update to truth proto lite import (due to an incompatible update in the common Truth dep). * Add needed testing coverage. Other miscellaneous fixes needed to support new tests. * Two fixes. 1. Introduce proper API compatibility for LocaleController 2. Ensure TranslationController is scoped (breaks test in downstream PR) * Fix Gradle builds on branch. * Resolve nearly all pending TODOs. Only remainder is a test suite whose tests need to be migrated. * Lint fixes. * Re-add method removed from merge. * Lint fixes. This also fixes broken extra/unused imports from the merge. Verified that the dev build works as of this commit. Haven't verified anything else. * Fix compute affected tests script. Adds support for very large PR changesets. * Fix failures found on CI. * Fix remaining Gradle failures found in CI. * Fix existing domain + app layer tests. Some reworking was needed in QuestionAssessmentProgressControllerTest. * Post-merge fix. * Gradle Espresso test fix. * Add missing KDocs, remove extra file, and other cleanups. * Lint fixes. * Fix CI & lint checks (except regex). * Deflake DataProviderTestMonitorTest. * Address reviewer comments. * Lint fixes. * Fix affected tests from earlier changes. These failures were found from CI test workflows. * Fix remaining Gradle failures. This introduces a proper fallback mechanism for content strings that allows Gradle builds & tests to work properly, and adds more robustness in case misconfigurations actually happen. * Add placeholders for new needed tests. * Fix broken tests. This came from the earlier commit's fix--the suite hadn't been updated. * Add needed tests for new behaviors. * Fix Gradle build & mechanism change failures. * Lint fixes. * Undo inadvertent change to Gradle jvmargs. * Disable most tests on Espresso. * Test fixes + make monitor Espresso-compatible. * Fix broken tests. Refactor how platform parameter module. Add new options fragment tests. * Add exemptions & regex check tests. * Lint fixes. * Lint fixes. * Fix broken tests (per CI). Co-authored-by: translatewiki.net <[email protected]>
* Add support for AABs, build flavors, and proguard. There are a lot of details to cover here--see the PR for the complete context. * Lint & codeowner fixes. * Fix failures. - Add missing codeowner - Add support for configuring base branch reference - Update CI for dev/alpha AAB builds to use 'develop' since there's no origin configured by default in the workflows * Different attempt to fix bad develop reference in CI. * Initial commit. This is needed to open a PR on GitHub. This commit is being made so that the PR can start off in a broken Actions state. This also initially disables most non-Bazel workflows to make workflow iteration faster and less impacting on other team members. * Introduce infrastructure for batching. This introduces a new mechanism for passing lists of tests to sharded test targets in CI, and hooks it up. No actual sharding is occurring yet. This led to some simplifications in the CI workflow since the script can be more dynamic in computing the full list of targets (which also works around a previous bug with instrumentation tests being run). Java proto lite also needed to be upgraded for the scripts to be able to use it. More testing/documentation needed as this functionality continues to expand. * Add bucketing strategy. This simply partitions bucketed groups of targets into chunks of 10 for each run. Only 3 buckets are currently retained to test sharding in CI before introducing full support. * Fix caching & stabilize builds. Fixes some caching bucket and output bugs. Also, introduces while loop & keep_going to introduce resilience against app test build failures (or just test failures in general). * Increase sharding & add randomization. Also, enable other workflows. Note that CI shouldn't fully pass yet since some documentation and testing needs to be added yet, but this is meant to be a more realistic test of the CI environment before the PR is finished. * Improving partitionin & readability. Adds a human-readable prefix to make the shards look a bit nicer. Also, adds more fine-tuned partitioning to bucket & reduce shard counts to improve overall timing. Will need to be tested in CI. * Add new tests & fix static analysis errors. * Fix script. A newly computed variable wasn't updated to be used in an earlier change. * Fix broken tests & test configuration. Add docstrings for proto. * Fix mistake from earlier commit. * Try 10 max parallel actions instead. See #3757 (comment) for context. * Fix another error from an earlier commit. * Localisation updates from https://translatewiki.net. * Fix mv command so it works on Linux & OSX. Neither 'mv -t' nor piping to mv work on OSX so we needed to find an alternative (in this case just trying to move everything). This actually works a bit better since it's doing a per-file move rather than accommodating for files that shouldn't be moved (which isn't an issue since the destination directory is different than the one containing the AAB file). * Introduce initial domain layer for translations. Documentation, thorough tests, and detailed description of these changes are still needed. * Initial app layer implementation for translations. This demonstrates working string selection for system-based and overwritten app languages, including necessary activity recreation & layout direction overwriting. This also includes a bunch of Dagger infra refactoring so that some app layer packages can now be modularized (including the new packages). * Domain changes needed per downstream UI changes. * Add patterns & fixes. This involves MANY broad changes to ensure consistent string retrieval (for arrays and plurals), formatting, and string transformations throughout the codebase. Some extra patterns to added to fix things that were needed, and a few issues were fixed along the way. * Add needed domain changes for downstream branch. Also includes fixing circular dependency issue by splitting out some of the locale components to be part of utility rather than domain (so that utiltiy and other packages can depend on MachineLocale). * Introduce support for content localization. This includes a bunch of stuff that'll be described in more detail in the PR description, but it essentially: - Adds support for displaying content in explorations, questions, concept cards, and revision cards in a non-English language - Adds support for submitting non-English answers - Updates test structures to validate everything exception questions is working for localization * Fix structures to work with parsing assumptions. * Fix regex checks for translated strings. Also, performance improvements for the regex check. * Lint-ish fix. * Fix failing regex checks. * Add check for nested res subdirectories. * Add remaining regex patterns & fixes. * Clean up locale infra. Add some other needed functionality. * Attempt to delete strings to force history. * Gate options behind compile-time flag. Flag status is off by default until #52 is finished. * Proguard fixes for Glide. Update version code since 6 & 7 were shipped. * Make AAB builds/runs manual-only targets. * Fix broken tests. * Fix lint issues & add KDocs. Also, abstract ContentLocale for consistency & to disallow direct construction. * Add 6/11 test suites (& placeholders for other 4). Silence one file missing a test suite (since it doesn't need one). Also, some tweaks to the language support definitions. * Add more test suites for domain layers. Included introducing a new general purpose utility for testing data providers + its own test suite. * Introduce wrapper & fake for bidi wrapping. Also, add test version of AssetRepository. Add new placeholder tests & update all tests project-wide to make sure that they build. * Add remaining tests. Included some shadow refactoring, and introducing new test-only resources. * Fix Gradle builds. * Lint fixes. * Resolve remaining incomplete TODOs. * Add new codeowners. * Post-merge fixes. Make all non-app layer targets build (haven't run tests yet). Audited existing bidi wrapping cases & converted strings over to being %s-only. * Fix most test targets (builds). All non-app tests confirmed as passing. * Fix all remaining test builds. Introduce new TestActivity for scaffolding all non-activity tests. * Fix all app layer tests. Add fixes for question player & old answer displaying. Add fix for guaranteed crash on startup after some changes between now & the first build of MR3 (dueu to extra updates in SplashActivityPresenter). * Fix questions & profile issues. * Type specifier pattern & fixes. Address temporary TODO by removing kdoc. * Add missing KDocs. * Boilerplate & TODOs for needed tests. * Add new needed test dep. Required an update to truth proto lite import (due to an incompatible update in the common Truth dep). * Add needed testing coverage. Other miscellaneous fixes needed to support new tests. * Two fixes. 1. Introduce proper API compatibility for LocaleController 2. Ensure TranslationController is scoped (breaks test in downstream PR) * Fix Gradle builds on branch. * Resolve nearly all pending TODOs. Only remainder is a test suite whose tests need to be migrated. * Lint fixes. * Re-add method removed from merge. * Lint fixes. This also fixes broken extra/unused imports from the merge. Verified that the dev build works as of this commit. Haven't verified anything else. * Fix compute affected tests script. Adds support for very large PR changesets. * Fix failures found on CI. * Fix remaining Gradle failures found in CI. * Fix existing domain + app layer tests. Some reworking was needed in QuestionAssessmentProgressControllerTest. * Post-merge fix. * Gradle Espresso test fix. * Add missing KDocs, remove extra file, and other cleanups. * Lint fixes. * Fix CI & lint checks (except regex). * Deflake DataProviderTestMonitorTest. * Address reviewer comments. * Lint fixes. * Fix affected tests from earlier changes. These failures were found from CI test workflows. * Fix remaining Gradle failures. This introduces a proper fallback mechanism for content strings that allows Gradle builds & tests to work properly, and adds more robustness in case misconfigurations actually happen. * Add placeholders for new needed tests. * Fix broken tests. This came from the earlier commit's fix--the suite hadn't been updated. * Add needed tests for new behaviors. * Fix Gradle build & mechanism change failures. * Lint fixes. * Undo inadvertent change to Gradle jvmargs. * Disable most tests on Espresso. * Test fixes + make monitor Espresso-compatible. * Fix broken tests. Refactor how platform parameter module. Add new options fragment tests. * Add exemptions & regex check tests. * Lint fixes. * Lint fixes. * Add new ratio input rule classifier. * Fix broken tests (per CI). Co-authored-by: translatewiki.net <[email protected]>
…cess death in low memory cases (#3860) * Add support for AABs, build flavors, and proguard. There are a lot of details to cover here--see the PR for the complete context. * Lint & codeowner fixes. * Fix failures. - Add missing codeowner - Add support for configuring base branch reference - Update CI for dev/alpha AAB builds to use 'develop' since there's no origin configured by default in the workflows * Different attempt to fix bad develop reference in CI. * Initial commit. This is needed to open a PR on GitHub. This commit is being made so that the PR can start off in a broken Actions state. This also initially disables most non-Bazel workflows to make workflow iteration faster and less impacting on other team members. * Introduce infrastructure for batching. This introduces a new mechanism for passing lists of tests to sharded test targets in CI, and hooks it up. No actual sharding is occurring yet. This led to some simplifications in the CI workflow since the script can be more dynamic in computing the full list of targets (which also works around a previous bug with instrumentation tests being run). Java proto lite also needed to be upgraded for the scripts to be able to use it. More testing/documentation needed as this functionality continues to expand. * Add bucketing strategy. This simply partitions bucketed groups of targets into chunks of 10 for each run. Only 3 buckets are currently retained to test sharding in CI before introducing full support. * Fix caching & stabilize builds. Fixes some caching bucket and output bugs. Also, introduces while loop & keep_going to introduce resilience against app test build failures (or just test failures in general). * Increase sharding & add randomization. Also, enable other workflows. Note that CI shouldn't fully pass yet since some documentation and testing needs to be added yet, but this is meant to be a more realistic test of the CI environment before the PR is finished. * Improving partitionin & readability. Adds a human-readable prefix to make the shards look a bit nicer. Also, adds more fine-tuned partitioning to bucket & reduce shard counts to improve overall timing. Will need to be tested in CI. * Add new tests & fix static analysis errors. * Fix script. A newly computed variable wasn't updated to be used in an earlier change. * Fix broken tests & test configuration. Add docstrings for proto. * Fix mistake from earlier commit. * Try 10 max parallel actions instead. See #3757 (comment) for context. * Fix another error from an earlier commit. * Localisation updates from https://translatewiki.net. * Fix mv command so it works on Linux & OSX. Neither 'mv -t' nor piping to mv work on OSX so we needed to find an alternative (in this case just trying to move everything). This actually works a bit better since it's doing a per-file move rather than accommodating for files that shouldn't be moved (which isn't an issue since the destination directory is different than the one containing the AAB file). * Introduce initial domain layer for translations. Documentation, thorough tests, and detailed description of these changes are still needed. * Initial app layer implementation for translations. This demonstrates working string selection for system-based and overwritten app languages, including necessary activity recreation & layout direction overwriting. This also includes a bunch of Dagger infra refactoring so that some app layer packages can now be modularized (including the new packages). * Domain changes needed per downstream UI changes. * Add patterns & fixes. This involves MANY broad changes to ensure consistent string retrieval (for arrays and plurals), formatting, and string transformations throughout the codebase. Some extra patterns to added to fix things that were needed, and a few issues were fixed along the way. * Add needed domain changes for downstream branch. Also includes fixing circular dependency issue by splitting out some of the locale components to be part of utility rather than domain (so that utiltiy and other packages can depend on MachineLocale). * Introduce support for content localization. This includes a bunch of stuff that'll be described in more detail in the PR description, but it essentially: - Adds support for displaying content in explorations, questions, concept cards, and revision cards in a non-English language - Adds support for submitting non-English answers - Updates test structures to validate everything exception questions is working for localization * Fix structures to work with parsing assumptions. * Fix regex checks for translated strings. Also, performance improvements for the regex check. * Lint-ish fix. * Fix failing regex checks. * Add check for nested res subdirectories. * Add remaining regex patterns & fixes. * Clean up locale infra. Add some other needed functionality. * Attempt to delete strings to force history. * Gate options behind compile-time flag. Flag status is off by default until #52 is finished. * Proguard fixes for Glide. Update version code since 6 & 7 were shipped. * Make AAB builds/runs manual-only targets. * Fix broken tests. * Fix lint issues & add KDocs. Also, abstract ContentLocale for consistency & to disallow direct construction. * Add 6/11 test suites (& placeholders for other 4). Silence one file missing a test suite (since it doesn't need one). Also, some tweaks to the language support definitions. * Add more test suites for domain layers. Included introducing a new general purpose utility for testing data providers + its own test suite. * Introduce wrapper & fake for bidi wrapping. Also, add test version of AssetRepository. Add new placeholder tests & update all tests project-wide to make sure that they build. * Add remaining tests. Included some shadow refactoring, and introducing new test-only resources. * Fix Gradle builds. * Lint fixes. * Resolve remaining incomplete TODOs. * Add new codeowners. * Post-merge fixes. Make all non-app layer targets build (haven't run tests yet). Audited existing bidi wrapping cases & converted strings over to being %s-only. * Fix most test targets (builds). All non-app tests confirmed as passing. * Fix all remaining test builds. Introduce new TestActivity for scaffolding all non-activity tests. * Fix all app layer tests. Add fixes for question player & old answer displaying. Add fix for guaranteed crash on startup after some changes between now & the first build of MR3 (dueu to extra updates in SplashActivityPresenter). * Fix questions & profile issues. * Type specifier pattern & fixes. Address temporary TODO by removing kdoc. * Add missing KDocs. * Boilerplate & TODOs for needed tests. * Add new needed test dep. Required an update to truth proto lite import (due to an incompatible update in the common Truth dep). * Add needed testing coverage. Other miscellaneous fixes needed to support new tests. * Two fixes. 1. Introduce proper API compatibility for LocaleController 2. Ensure TranslationController is scoped (breaks test in downstream PR) * Fix Gradle builds on branch. * Resolve nearly all pending TODOs. Only remainder is a test suite whose tests need to be migrated. * Lint fixes. * Re-add method removed from merge. * Lint fixes. This also fixes broken extra/unused imports from the merge. Verified that the dev build works as of this commit. Haven't verified anything else. * Fix compute affected tests script. Adds support for very large PR changesets. * Fix failures found on CI. * Fix remaining Gradle failures found in CI. * Fix existing domain + app layer tests. Some reworking was needed in QuestionAssessmentProgressControllerTest. * Post-merge fix. * Gradle Espresso test fix. * Add missing KDocs, remove extra file, and other cleanups. * Lint fixes. * Fix CI & lint checks (except regex). * Deflake DataProviderTestMonitorTest. * Address reviewer comments. * Lint fixes. * Fix affected tests from earlier changes. These failures were found from CI test workflows. * Fix remaining Gradle failures. This introduces a proper fallback mechanism for content strings that allows Gradle builds & tests to work properly, and adds more robustness in case misconfigurations actually happen. * Add placeholders for new needed tests. * Fix broken tests. This came from the earlier commit's fix--the suite hadn't been updated. * Add needed tests for new behaviors. * Fix Gradle build & mechanism change failures. * Lint fixes. * Undo inadvertent change to Gradle jvmargs. * Disable most tests on Espresso. * Test fixes + make monitor Espresso-compatible. * Fix broken tests. Refactor how platform parameter module. Add new options fragment tests. * Add exemptions & regex check tests. * Lint fixes. * Lint fixes. * Add new ratio input rule classifier. * Fix broken tests (per CI). * Add mechanism to recover from crashes. * Remove malformed TODO. Co-authored-by: translatewiki.net <[email protected]>
* Add support for AABs, build flavors, and proguard. There are a lot of details to cover here--see the PR for the complete context. * Lint & codeowner fixes. * Fix failures. - Add missing codeowner - Add support for configuring base branch reference - Update CI for dev/alpha AAB builds to use 'develop' since there's no origin configured by default in the workflows * Different attempt to fix bad develop reference in CI. * Initial commit. This is needed to open a PR on GitHub. This commit is being made so that the PR can start off in a broken Actions state. This also initially disables most non-Bazel workflows to make workflow iteration faster and less impacting on other team members. * Introduce infrastructure for batching. This introduces a new mechanism for passing lists of tests to sharded test targets in CI, and hooks it up. No actual sharding is occurring yet. This led to some simplifications in the CI workflow since the script can be more dynamic in computing the full list of targets (which also works around a previous bug with instrumentation tests being run). Java proto lite also needed to be upgraded for the scripts to be able to use it. More testing/documentation needed as this functionality continues to expand. * Add bucketing strategy. This simply partitions bucketed groups of targets into chunks of 10 for each run. Only 3 buckets are currently retained to test sharding in CI before introducing full support. * Fix caching & stabilize builds. Fixes some caching bucket and output bugs. Also, introduces while loop & keep_going to introduce resilience against app test build failures (or just test failures in general). * Increase sharding & add randomization. Also, enable other workflows. Note that CI shouldn't fully pass yet since some documentation and testing needs to be added yet, but this is meant to be a more realistic test of the CI environment before the PR is finished. * Improving partitionin & readability. Adds a human-readable prefix to make the shards look a bit nicer. Also, adds more fine-tuned partitioning to bucket & reduce shard counts to improve overall timing. Will need to be tested in CI. * Add new tests & fix static analysis errors. * Fix script. A newly computed variable wasn't updated to be used in an earlier change. * Fix broken tests & test configuration. Add docstrings for proto. * Fix mistake from earlier commit. * Try 10 max parallel actions instead. See #3757 (comment) for context. * Fix another error from an earlier commit. * Localisation updates from https://translatewiki.net. * Fix mv command so it works on Linux & OSX. Neither 'mv -t' nor piping to mv work on OSX so we needed to find an alternative (in this case just trying to move everything). This actually works a bit better since it's doing a per-file move rather than accommodating for files that shouldn't be moved (which isn't an issue since the destination directory is different than the one containing the AAB file). * Introduce initial domain layer for translations. Documentation, thorough tests, and detailed description of these changes are still needed. * Initial app layer implementation for translations. This demonstrates working string selection for system-based and overwritten app languages, including necessary activity recreation & layout direction overwriting. This also includes a bunch of Dagger infra refactoring so that some app layer packages can now be modularized (including the new packages). * Domain changes needed per downstream UI changes. * Add patterns & fixes. This involves MANY broad changes to ensure consistent string retrieval (for arrays and plurals), formatting, and string transformations throughout the codebase. Some extra patterns to added to fix things that were needed, and a few issues were fixed along the way. * Add needed domain changes for downstream branch. Also includes fixing circular dependency issue by splitting out some of the locale components to be part of utility rather than domain (so that utiltiy and other packages can depend on MachineLocale). * Introduce support for content localization. This includes a bunch of stuff that'll be described in more detail in the PR description, but it essentially: - Adds support for displaying content in explorations, questions, concept cards, and revision cards in a non-English language - Adds support for submitting non-English answers - Updates test structures to validate everything exception questions is working for localization * Fix structures to work with parsing assumptions. * Fix regex checks for translated strings. Also, performance improvements for the regex check. * Lint-ish fix. * Fix failing regex checks. * Add check for nested res subdirectories. * Add remaining regex patterns & fixes. * Clean up locale infra. Add some other needed functionality. * Attempt to delete strings to force history. * Gate options behind compile-time flag. Flag status is off by default until #52 is finished. * Proguard fixes for Glide. Update version code since 6 & 7 were shipped. * Make AAB builds/runs manual-only targets. * Fix broken tests. * Fix lint issues & add KDocs. Also, abstract ContentLocale for consistency & to disallow direct construction. * Add 6/11 test suites (& placeholders for other 4). Silence one file missing a test suite (since it doesn't need one). Also, some tweaks to the language support definitions. * Add more test suites for domain layers. Included introducing a new general purpose utility for testing data providers + its own test suite. * Introduce wrapper & fake for bidi wrapping. Also, add test version of AssetRepository. Add new placeholder tests & update all tests project-wide to make sure that they build. * Add remaining tests. Included some shadow refactoring, and introducing new test-only resources. * Fix Gradle builds. * Lint fixes. * Resolve remaining incomplete TODOs. * Add new codeowners. * Post-merge fixes. Make all non-app layer targets build (haven't run tests yet). Audited existing bidi wrapping cases & converted strings over to being %s-only. * Fix most test targets (builds). All non-app tests confirmed as passing. * Fix all remaining test builds. Introduce new TestActivity for scaffolding all non-activity tests. * Fix all app layer tests. Add fixes for question player & old answer displaying. Add fix for guaranteed crash on startup after some changes between now & the first build of MR3 (dueu to extra updates in SplashActivityPresenter). * Fix questions & profile issues. * Type specifier pattern & fixes. Address temporary TODO by removing kdoc. * Add missing KDocs. * Boilerplate & TODOs for needed tests. * Add new needed test dep. Required an update to truth proto lite import (due to an incompatible update in the common Truth dep). * Add needed testing coverage. Other miscellaneous fixes needed to support new tests. * Two fixes. 1. Introduce proper API compatibility for LocaleController 2. Ensure TranslationController is scoped (breaks test in downstream PR) * Fix Gradle builds on branch. * Resolve nearly all pending TODOs. Only remainder is a test suite whose tests need to be migrated. * Lint fixes. * Re-add method removed from merge. * Lint fixes. This also fixes broken extra/unused imports from the merge. Verified that the dev build works as of this commit. Haven't verified anything else. * Fix compute affected tests script. Adds support for very large PR changesets. * Fix failures found on CI. * Fix remaining Gradle failures found in CI. * Fix existing domain + app layer tests. Some reworking was needed in QuestionAssessmentProgressControllerTest. * Post-merge fix. * Gradle Espresso test fix. * Add missing KDocs, remove extra file, and other cleanups. * Lint fixes. * Fix CI & lint checks (except regex). * Deflake DataProviderTestMonitorTest. * Address reviewer comments. * Lint fixes. * Fix affected tests from earlier changes. These failures were found from CI test workflows. * Fix remaining Gradle failures. This introduces a proper fallback mechanism for content strings that allows Gradle builds & tests to work properly, and adds more robustness in case misconfigurations actually happen. * Add placeholders for new needed tests. * Fix broken tests. This came from the earlier commit's fix--the suite hadn't been updated. * Add needed tests for new behaviors. * Fix Gradle build & mechanism change failures. * Lint fixes. * Undo inadvertent change to Gradle jvmargs. * Disable most tests on Espresso. * Test fixes + make monitor Espresso-compatible. * Fix broken tests. Refactor how platform parameter module. Add new options fragment tests. * Add exemptions & regex check tests. * Lint fixes. * Lint fixes. * Add new ratio input rule classifier. * Fix broken tests (per CI). * Add mechanism to recover from crashes. * Remove malformed TODO. * Add Proguard rules needed to fix splash issue. See PR & related issue for more context. * Update LocaleController.kt Remove TODO on #3800 since it's been resolved. Co-authored-by: translatewiki.net <[email protected]>
Explanation
Fixes #3752
This PR introduces support for batching Bazel tests in CI, that is, rather than running all tests under a single workflow (no sharding) or running one workflow for each test (maximum sharding), the system will now compute "buckets" of tests to run together in order to:
Recent runs suggest a substantial reduction in runtime: 2-2.5 hours down to ~45 minutes (a bit slower than Gradle on the last attempt, though this will be greatly affected by overall CI load in the organization, how much the local PR changes the build graph, and overall performance of the cache since it's eagerly evicted). A subsequent run completed in ~30 minutes (10-15 minutes faster than Gradle) after bucketing tweaks (and probably with a warmer cache). The overall runtime is still substantially longer than Gradle (see table below), but Bazel lends itself to parallelization much more flexibly than Gradle does. Edit: after introducing improved batching policies & increasing run rate to 10 parallel rules, we actually saw an ~18 minute runtime which is actually faster than even the non-app Gradle test suite.
Some notes on the batching strategy:
The result is a 20x reduction in total shards (down to 12 for the whole test suite) and shards that each require about 15-20 minutes to run. We likely will continue to tweak how these are balanced over time, and long-term could even consider making these parameters automatically tuned based on long histories of test runs.
The following table shows the first fully successful test run (pre-grouping) which was used to influence grouping & partitioning policies:
* This corresponds to the number of shards observed when running with a non-grouping 20-tests-per-shard policy.
** Note that results for instrumentation tests are probably unreliable due to the low number of tests, so it's currently being considered a 'fast' test bucket.
Other technical details of note for this PR:
Finally, note that while this PR demonstrates the '[RunAllTests]' flow, #3750 demonstrates the standard compute affected tests (though because it's changing a WORKSPACE file it's triggering the full set of tests to run).
Essential Checklist
For UI-specific PRs only
N/A