diff --git a/.github/workflows/breaking-change-review.yml b/.github/workflows/breaking-change-review.yml index 0d12d418d1..8c7971b341 100644 --- a/.github/workflows/breaking-change-review.yml +++ b/.github/workflows/breaking-change-review.yml @@ -1,4 +1,4 @@ -name: PR Review Workflow for Breaking Changes +name: PR Review Workflow on: pull_request: @@ -11,8 +11,12 @@ on: jobs: check_breaking_change: + name: Require QA review runs-on: ubuntu-latest steps: + - name: Checkout repository + uses: actions/checkout@v2 + - name: Check for breaking change label id: check_label uses: actions/github-script@v6 @@ -28,12 +32,29 @@ jobs: console.log(`Has breaking change label: ${hasBreakingChange}`); return hasBreakingChange; - - name: Set QA reviewers + - name: Load QA teams + if: steps.check_label.outputs.result == 'true' + id: load_qa_teams + run: | + echo 'qa_teams<> $GITHUB_OUTPUT + cat .github/qa-teams.yml >> $GITHUB_OUTPUT + echo 'EOF' >> $GITHUB_OUTPUT + + - name: Set random QA reviewers if: steps.check_label.outputs.result == 'true' id: set_reviewers run: | - echo "mobile_qa=churik,yevh-berdnyk,VolodLytvynenko,pavloburykh,mariia-skrypnyk,Horupa-Olena" >> $GITHUB_OUTPUT - echo "desktop_qa=anastasiyaig,virginiabalducci,glitchminer,antdanchenko" >> $GITHUB_OUTPUT + mobile_qa_required=$(echo '${{ steps.load_qa_teams.outputs.qa_teams }}' | yq eval '.mobile_qa.reviewers_required' -) + desktop_qa_required=$(echo '${{ steps.load_qa_teams.outputs.qa_teams }}' | yq eval '.desktop_qa.reviewers_required' -) + + mobile_qa_members=$(echo '${{ steps.load_qa_teams.outputs.qa_teams }}' | yq eval '.mobile_qa.members[]' - | tr '\n' ' ') + desktop_qa_members=$(echo '${{ steps.load_qa_teams.outputs.qa_teams }}' | yq eval '.desktop_qa.members[]' - | tr '\n' ' ') + + mobile_qa=$(echo $mobile_qa_members | tr ' ' '\n' | shuf -n $mobile_qa_required | tr '\n' ',' | sed 's/,$//') + desktop_qa=$(echo $desktop_qa_members | tr ' ' '\n' | shuf -n $desktop_qa_required | tr '\n' ',' | sed 's/,$//') + + echo "mobile_qa=$mobile_qa" >> $GITHUB_OUTPUT + echo "desktop_qa=$desktop_qa" >> $GITHUB_OUTPUT - name: Request QA reviews if: steps.check_label.outputs.result == 'true' @@ -45,6 +66,8 @@ jobs: const desktopQA = '${{ steps.set_reviewers.outputs.desktop_qa }}'.split(','); const reviewers = [...mobileQA, ...desktopQA]; + console.log('Requesting reviews from:', reviewers); + await github.rest.pulls.requestReviewers({ owner: context.repo.owner, repo: context.repo.repo, @@ -94,13 +117,9 @@ jobs: let message = 'This PR has the breaking change label and requires approval from both mobile-qa and desktop-qa teams before it can be merged.\n\n'; - if (!mobileQAApproved && !desktopQAApproved) { - message += 'Both mobile-qa and desktop-qa teams have not approved this PR yet.'; - } else if (!mobileQAApproved) { - message += 'The mobile-qa team has not approved this PR yet.'; - } else if (!desktopQAApproved) { - message += 'The desktop-qa team has not approved this PR yet.'; - } + message += `- ${mobileQAApproved ? '[ ]' : '[x]'} Mobile QA team review\n` + message += `- ${desktopQAApproved ? '[ ]' : '[x]'} Desktop QA team review` + await github.rest.checks.create({ owner: context.repo.owner, @@ -121,7 +140,6 @@ jobs: with: github-token: ${{secrets.GITHUB_TOKEN}} script: | - const { data: reviews } = await github.rest.pulls.listReviews({ owner: context.repo.owner, repo: context.repo.repo, diff --git a/.github/workflows/qa-teams.yml b/.github/workflows/qa-teams.yml new file mode 100644 index 0000000000..a465d7c4a8 --- /dev/null +++ b/.github/workflows/qa-teams.yml @@ -0,0 +1,18 @@ +# QA Teams Configuration +mobile_qa: + reviewers_required: 2 + members: + - churik + - yevh-berdnyk + - VolodLytvynenko + - pavloburykh + - mariia-skrypnyk + - Horupa-Olena + +desktop_qa: + reviewers_required: 2 + members: + - anastasiyaig + - virginiabalducci + - glitchminer + - antdanchenko \ No newline at end of file