chore: Add worklow to check cyclic deps in a PR (#33197)

## Description
Add a GitHub workflow to compare the number of cyclic dependencies in a
PR to the number in the release branch. If the PR introduces new cyclic
dependencies, a comment should be posted in the conversation to alert
the developer.

Fixes #`Issue Number`  
_or_  
Fixes `Issue URL`
> [!WARNING]  
> _If no issue exists, please create an issue first, and check with the
maintainers if the issue is valid._

## Automation

/ok-to-test tags="@tag.Sanity"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!TIP]
> 🟢 🟢 🟢 All cypress tests have passed! 🎉 🎉 🎉
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/9228474130>
> Commit: c93f3e5df863ab7e2e287bf093a14a3f5f43e8e8
> Cypress dashboard url: <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=9228474130&attempt=1"
target="_blank">Click here!</a>

<!-- end of auto-generated comment: Cypress test results  -->










## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No
This commit is contained in:
Diljit 2024-05-27 08:41:45 +05:30 committed by GitHub
parent 55ae8594ad
commit 1ceee16a75
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 83 additions and 0 deletions

View File

@ -0,0 +1,74 @@
name: Cyclic Dependency Check
on:
workflow_call:
inputs:
pr:
description: "This is the PR number in case the workflow is being called in a pull request"
required: false
type: number
jobs:
check-cyclic-dependencies:
runs-on: ubuntu-latest
defaults:
run:
working-directory: app/client
shell: bash
steps:
# The checkout steps MUST happen first because the default directory is set according to the code base.
# GitHub Action expects all future commands to be executed in the code directory. Hence, we need to check out
# the code before doing anything else.
# Check out merge commit with the base branch in case this workflow is invoked via pull request
- name: Checkout the merged commit from PR and base branch
uses: actions/checkout@v4
with:
ref: refs/pull/${{ inputs.pr }}/merge
- name: Count circular dependencies on PR branch
id: count-cyclic-deps-in-pr
run: |
npx dpdm ./src/* --circular --warning=false --tree=false > pr_circular_deps.txt
pr_count=$(cat pr_circular_deps.txt | wc -l)
echo "pr_count=$pr_count" >> $GITHUB_OUTPUT
- name: Checkout release branch
uses: actions/checkout@v4
with:
ref: release
- name: Count circular dependencies on release branch
id: coun-cyclic-deps-in-release
run: |
npx dpdm ./src/* --circular --warning=false --tree=false > release_circular_deps.txt
release_count=$(cat release_circular_deps.txt | wc -l)
echo "release_count=$release_count" >> $GITHUB_OUTPUT
- name: Compare circular dependencies
id: compare-deps
run: |
release_count=${{ steps.coun-cyclic-deps-in-release.outputs.release_count }}
pr_count=${{ steps.count-cyclic-deps-in-pr.outputs.pr_count }}
diff=$((pr_count - release_count))
if [ "$diff" -gt 0 ]; then
echo "has_more_cyclic_deps=true" >> "$GITHUB_OUTPUT"
echo "diff=$diff" >> "$GITHUB_OUTPUT"
fi
# Comment on the PR if cyclic dependencies are found
- name: Comment the result on PR
if: steps.compare-deps.outputs.has_more_cyclic_deps == 'true'
uses: actions/github-script@v3
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const prNumber = context.payload.pull_request.number;
const message = `⚠️ Cyclic Dependency Check:\n\nThis PR has increased the number of cyclic dependencies by ${{steps.compare-deps.outputs.diff}}, when compared with the release branch.\n\nRefer [this document](https://appsmith.notion.site/How-to-check-cyclic-dependencies-c47b08fe5f2f4261a3a234b19e13f2db) to identify the cyclic dependencies introduced by this PR.`;
github.issues.createComment({
...context.repo,
issue_number: prNumber,
body: message
});

View File

@ -83,6 +83,15 @@ jobs:
with:
pr: ${{ github.event.pull_request.number }}
client-check-cyclic-deps:
name: client-check-cyclic-deps
needs: path-filter
if: needs.path-filter.outputs.client == 'true'
uses: ./.github/workflows/ci-client-cyclic-deps-check.yml
secrets: inherit
with:
pr: ${{ github.event.pull_request.number }}
qc-result:
name: qc-result
needs: