From 0afc9dd79450970039d812c94f361193543544bf Mon Sep 17 00:00:00 2001 From: Hetu Nandu Date: Mon, 12 Aug 2024 11:24:49 +0530 Subject: [PATCH] chore: Ability to run PR automations every time PR updates (#35476) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description By changing the workflow trigger and the way to check for correct labels, we are trying to allow the PR integrations tests to run every time the PR is updated. That means, if you push changes, and the PR already has ok-to-test label, it will rerun the tests based on new changes ## Automation /ok-to-test tags="@tag.Sanity" ### :mag: Cypress test results > [!TIP] > 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉 > Workflow run: > Commit: c59583ba28c8cdff35a12422b8c73838c6efdc85 > Cypress dashboard. > Tags: `@tag.Sanity` > Spec: >
Thu, 08 Aug 2024 06:32:48 UTC ## Communication Should the DevRel and Marketing teams inform users about this change? - [ ] Yes - [ ] No ## Summary by CodeRabbit - **New Features** - Introduced a new job, `checkTestLabel`, to verify the presence of the "ok-to-test" label on pull requests. - Added a new job, `mark-stale`, to mark the Cypress status as stale when the label is absent. - **Improvements** - Updated the `parse-tags` job to run only after the `checkTestLabel` job, enhancing workflow control. - Modified the conditions for executing the `parse-tags` job based on the output of the `checkTestLabel` job. - **Style** - Minor formatting adjustments for job dependencies in the workflow. --- .github/workflows/pr-automation.yml | 63 ++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/.github/workflows/pr-automation.yml b/.github/workflows/pr-automation.yml index bc9d4ae446..ec40d88ce0 100644 --- a/.github/workflows/pr-automation.yml +++ b/.github/workflows/pr-automation.yml @@ -1,17 +1,68 @@ name: PR Automation test suite +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + on: pull_request: branches: - release - pg - types: - - labeled + types: [ labeled, synchronize ] jobs: - parse-tags: + checkTestLabel: + runs-on: ubuntu-latest + outputs: + ok_to_test: ${{ steps.checkLabel.outputs.ok_to_test }} + steps: + + - name: Check PR Label + id: checkLabel + uses: actions/github-script@v7 + with: + # This script will check if the PR has ok-to-test label. + # To avoid being dependent on the event which triggered this workflow, + # we will always get the pull request labels directly from the context + # It will later set the output to be "true" or "false". + script: | + const labels = context.payload.pull_request.labels.map(label => label.name); + if (labels.includes("ok-to-test")) { + console.log("Label 'ok-to-test' is present"); + core.setOutput("ok_to_test", "true"); + } else { + console.log("Label 'ok-to-test' is not present"); + core.setOutput("ok_to_test", "false"); + } + + mark-stale: + needs: [ checkTestLabel ] + if: needs.checkTestLabel.outputs.ok_to_test == 'false' + runs-on: ubuntu-latest + permissions: + pull-requests: write + defaults: + run: + shell: bash + steps: + - name: Checkout code + uses: actions/checkout@v4 + # In case of a no label present, mark the Cypress status to be stale + - name: Mark the Cypress response to be stale + uses: actions/github-script@v7 + env: + NODE_PATH: "${{ github.workspace }}/.github/workflows/scripts" + BODY: | + Tests have not run on the HEAD ${{ github.event.pull_request.head.sha }} yet + with: + script: | + require("write-cypress-status.js")({core, context, github}, "warning", process.env.BODY) + + parse-tags: + needs: [ checkTestLabel ] + if: needs.checkTestLabel.outputs.ok_to_test == 'true' runs-on: ubuntu-latest - if: github.event.label.name == 'ok-to-test' permissions: pull-requests: write defaults: @@ -27,7 +78,7 @@ jobs: - name: Checkout the head commit of the branch uses: actions/checkout@v4 with: - repository: appsmithorg/appsmith + repository: appsmithorg/appsmith # Reads the PR description to retrieve the /ok-to-test or, if that's absent, the /test command - name: Read tags from PR description @@ -72,7 +123,7 @@ jobs: # Call the workflow to run Cypress tests perform-test: - needs: [parse-tags] + needs: [ parse-tags ] if: success() uses: ./.github/workflows/pr-cypress.yml secrets: inherit