## How to Mute a test - Through a PR Report - Open report in PR ![screen](https://storage.yandexcloud.net/ydb-public-images/report_mute.png) - In context menu of test select `Crete mute issue` - Through the [Test history](https://datalens.yandex/4un3zdm0zcnyr?tab=A4) dashboard - Enter the test name or path in the `full_name contain` field, click **Apply** - the search is done by the occurrence. ![image.png](https://storage.yandexcloud.net/ydb-public-images/mute_candidate.png) - Click the `Mute` link, which will create a draft issue in GitHub. * Add the issue to the [Mute and Un-mute](https://github.com/orgs/ydb-platform/projects/45/views/6?visibleFields=%5B%22Title%22%2C%22Assignees%22%2C%22Status%22%2C126637100%5D) project. * Set the `status` to `Mute` * Set the `owner` field to the team name (see the issue for the owner's name). ![image.png](https://storage.yandexcloud.net/ydb-public-images/create_issue.png) * Open [muted_ya.txt](https://github.com/ydb-platform/ydb/blob/main/.github/config/muted_ya.txt) in a new tab and edit it. * Copy the line under `Add line to muted_ya.txt` (for example, like in the screenshot, `ydb/core/kqp/ut/query KqpStats.SysViewClientLost`) and add it to [muted_ya.txt](https://github.com/ydb-platform/ydb/blob/main/.github/config/muted_ya.txt). * Edit the branch for merging, for example, replace `{username}-patch-1` with `mute/{username}`. * Create a PR - copy the PR name from the issue name. * Copy the issue description to the PR, keep the line `Not for changelog (changelog entry is not required)`. * Take "OK" from member of test owner team in PR * Merge. * Link Issue and Pr (field "Development" in issue and PR) * Inform test owner team about new mutes - dm or in public chat (with mention of maintainer of team) * You are awesome! ## How to UnMute a test --IN PROGRESS-- * Open [muted_ya.txt](https://github.com/ydb-platform/ydb/blob/main/.github/config/muted_ya.txt) * Press "Edit file" and delete line of test * Commit changes (Edit the branch for merging, for example, replace `{username}-patch-1` with `mute/{username}`) * Edit PR name like "UnMute {testname}" * Take "OK" from member of test owner team in PR * Merge * If test have an issue in [Mute and Un-mute](https://github.com/orgs/ydb-platform/projects/45/views/6?visibleFields=%5B%22Title%22%2C%22Assignees%22%2C%22Status%22%2C126637100%5D) in status `Muted` - Move it to `Unmuted` * Link Issue and Pr (field "Development" in issue and PR) * Move issue to status `Unmuted` * You are awesome! ## How to manage muted tests by team --IN PROGRESS-- ### Explore your tests stability >If you want to get more info about stability of your test visit [dashboard](https://datalens.yandex/4un3zdm0zcnyr?tab=wED) (fill field `owner`=`{your_team_name}`) ![image.png](https://storage.yandexcloud.net/ydb-public-images/test_analitycs_1.png) ![image.png](https://storage.yandexcloud.net/ydb-public-images/test_analitycs_2.png) ### Find your muted tests >Not all muted tests have issue in github project about this , we working on it * Open project [Mute and Un-mute](https://github.com/orgs/ydb-platform/projects/45/views/6?visibleFields=%5B%22Title%22%2C%22Assignees%22%2C%22Status%22%2C126637100%5D) * click in label with name of your team, example [link to qp](https://github.com/orgs/ydb-platform/projects/45/views/6?filterQuery=owner%3Aqp) muted tests (cgi `?filterQuery=owner%3Aqp`) * Open `Mute {testname}` issue * Perform [How to unmute](#how-to-unmute) ## Flaky Tests ### Who and When Monitors Flaky Tests The CI duty engineer (in progress) checks flaky tests once a day (only working days). - Open the [Flaky](https://datalens.yandex/4un3zdm0zcnyr) dashboard. - Perform the sections **[Mute Flaky Test](#mute-flaky)** and **[Test Flaps More - Need to Unmute](#unmute-flaky)** once a day or ondemand ### Mute Flaky Tests Open the [Flaky](https://datalens.yandex/4un3zdm0zcnyr) dashboard. - Select today's date. - Look at the tests in the Mute candidate table. ![image.png](https://storage.yandexcloud.net/ydb-public-images/mute_candidate.png) - Select today's date in the `date_window`. - Select `days_ago_window = 5` (how many days back from the selected day to calculate statistics). Currently, there are calculations for 1 day and 5 days ago. * If you want to understand how long ago and how often the test started failing, you can click the `history` link in the table (loading may take time) or select `days_ago_window = 1`. - For `days_ago_window = 5`, set the values to filter out isolated failures and low run counts: * `fail_count >= 3` * `run_count >= 10` - Click the `Mute` link, which will create a draft issue in GitHub. - Perform steps from [How to mute](#how-to-mute) - You are awesome! ### Test is no longer flaky - Time to Unmute - Open the [Flaky](https://datalens.yandex/4un3zdm0zcnyr) dashboard. - Look at the tests in the UNMute candidate table. ![image.png](https://storage.yandexcloud.net/ydb-public-images/unmute.png) - If the `summary:` column shows `mute <= 3` and `success rate >= 98%` - **it's time to enable the test**. - Perform steps from [How to Unmute](#how-to-unmute) - You are awesome! ### Unmute stable and flaky tests automaticaly **setup** 1) ```pip install PyGithub``` 2) request git token ``` # Github api (personal access token (classic)) token shoud have permitions to # repo # - repo:status # - repo_deployment # - public_repo # admin:org # project ``` 3) save it to env `export GITHUB_TOKEN= 4) save to env `export CI_YDB_SERVICE_ACCOUNT_KEY_FILE_CREDENTIALS= **How to use** 0) *update your branch* - you shoud have last version of muted_ya localy 1) Run instance https://github.com/ydb-platform/ydb/actions/workflows/collect_analytics.yml 2) wait till end of step `Collect all test monitor (how long tests in state)` (about 7 min) 3) run `create_new_muted_ya.py update_muted_ya` - it creates bunch of files in `%repo_path%/mute_update/` | File Name | Description | |----------------------------------------|-------------------------------------------------------------------------------------------------| | deleted.txt | Tests what look like deleted (no runs 28 days in a row) | | deleted_debug.txt | With detailed info | | flaky.txt | Tests which are flaky today AND total runs > 3 AND fail_count > 2 | | flaky_debug.txt | With detailed info | | muted_stable.txt | Muted tests which are stable for the last 14 days | | muted_stable_debug.txt | With detailed info | | new_muted_ya.txt | Muted_ya.txt version with excluded **muted_stable** and **deleted** tests | | new_muted_ya_debug.txt | With detailed info | | new_muted_ya_with_flaky.txt | Muted_ya.txt version with excluded **muted_stable** and **deleted** tests and included **flaky**| | new_muted_ya_with_flaky_debug.txt | With detailed info | |muted_ya_sorted.txt| original muted_ya with resolved wildcards for real tests (not chunks)| |muted_ya_sorted_debug.txt| With detailed info| **1. Unmute Stable** 1) replace content of [muted_ya](https://github.com/ydb-platform/ydb/blob/main/.github/config/muted_ya.txt) with content of **new_muted_ya.txt** 2) create new PR and paste in PR Description - `` from concole output - content from **muted_stable_debug** and **deleted_debug** 3) Merge example https://github.com/ydb-platform/ydb/pull/11099 **2. Mute Flaky** (AFTER UNMUTE STABLE ONLY) 1) replace content of [muted_ya](https://github.com/ydb-platform/ydb/blob/main/.github/config/muted_ya.txt) with content of **new_muted_ya_with_flaky.txt** 2) create new PR 2) run `create_new_muted_ya.py create_issues` - it creates issue for each flaky test in **flaky.txt** 3) copy from console output text like ' Created issue ...' and paste in PR 4) merge example https://github.com/ydb-platform/ydb/pull/11101