PromucFlow_constructor/.github/workflows/pr-cypress.yml
Shrikant Sharat Kandula 81b7727817
chore: Move appsmithctl to RTS (#37531)
Move the `appsmithctl` code to RTS.

RTS' own build system will build `appsmithctl` as well. We're adding two
command scripts, `ctl` and `appsmithctl` to `/opt/bin`, which will be
the entrypoints for this. The `appsmithctl` is now just an alias to the
much shorter and non-redundancy-inducing `ctl`.

We aren't migrating to TypeScript in this PR so we're ignoring the new
`ctl` folder in both `tsconfig.json` and `.eslintrc`. That's temporary,
the next PR will fix that.


## Automation

/test 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/11930931528>
> Commit: 90b5f97b801ac8d4b4b0126d85edff3dccc050bd
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=11930931528&attempt=1"
target="_blank">Cypress dashboard</a>.
> Tags: `@tag.Sanity`
> Spec:
> <hr>Wed, 20 Nov 2024 10:36:02 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [x] No


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Release Notes

- **New Features**
  - Introduced the `appsmithctl` command for easier command execution.
  - Updated build process to include additional entry points.

- **Bug Fixes**
- Streamlined Docker build process, enhancing efficiency and reducing
complexity.

- **Documentation**
- Added a new section in the README for `appsmithctl` command
description.

- **Chores**
  - Updated dependencies in `package.json`.
  - Removed obsolete files and workflows to simplify project structure.

- **Style**
  - Added a new ESLint configuration for specific project needs.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2024-11-20 20:58:38 +05:30

233 lines
9.1 KiB
YAML

name: Cypress test suite
on:
workflow_call:
inputs:
tags:
required: true
type: string
spec:
required: false
type: string
matrix:
required: true
type: string
is-pg-build:
description: "This is a boolean value in case the workflow is being called for a PG build"
required: false
type: string
default: "false"
jobs:
server-build:
if: success()
name: server-build
uses: ./.github/workflows/server-build.yml
secrets: inherit
with:
pr: ${{ github.event.number }}
skip-tests: true
is-pg-build: ${{ inputs.is-pg-build }}
client-build:
if: success()
name: client-build
uses: ./.github/workflows/client-build.yml
secrets: inherit
with:
pr: ${{ github.event.number }}
rts-build:
if: success()
name: rts-build
uses: ./.github/workflows/rts-build.yml
secrets: inherit
with:
pr: ${{ github.event.number }}
build-docker-image:
needs: [client-build, server-build, rts-build]
# Only run if the build step is successful
if: success()
name: build-docker-image
uses: ./.github/workflows/build-docker-image.yml
secrets: inherit
with:
pr: ${{ github.event.number }}
ci-test:
needs: [build-docker-image]
# Only run if the build step is successful
if: success()
name: ci-test
uses: ./.github/workflows/ci-test-custom-script.yml
secrets: inherit
with:
pr: ${{ github.event.number }}
tags: ${{ inputs.tags }}
spec: ${{ inputs.spec }}
matrix: ${{ inputs.matrix }}
ci-test-result:
needs: [ci-test]
# Only run if the ci-test with matrices step is successful
if: always()
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Dump the client payload context
env:
PAYLOAD_CONTEXT: ${{ toJson(github.event) }}
run: echo "$PAYLOAD_CONTEXT"
- name: Setup node
if: needs.ci-test.result != 'success'
uses: actions/setup-node@v4
with:
node-version-file: app/client/package.json
- name: Install pg
if: needs.ci-test.result != 'success'
run: npm install pg
- name: Fetch the failed specs
if: needs.ci-test.result != 'success'
id: failed_specs
env:
DB_HOST: ${{ secrets.CYPRESS_DB_HOST }}
DB_NAME: ${{ secrets.CYPRESS_DB_NAME }}
DB_USER: ${{ secrets.CYPRESS_DB_USER }}
DB_PWD: ${{ secrets.CYPRESS_DB_PWD }}
RUN_ID: ${{ github.run_id }}
ATTEMPT_NUMBER: ${{ github.run_attempt }}
uses: actions/github-script@v7
with:
script: |
const { Pool } = require("pg");
const { DB_HOST, DB_NAME, DB_USER, DB_PWD, RUN_ID, ATTEMPT_NUMBER } = process.env
const client = await new Pool({
user: DB_USER,
host: DB_HOST,
database: DB_NAME,
password: DB_PWD,
port: 5432,
connectionTimeoutMillis: 60000,
}).connect();
const result = await client.query(
`SELECT DISTINCT name FROM public."specs"
WHERE "matrixId" IN
(SELECT id FROM public."matrix"
WHERE "attemptId" = (
SELECT id FROM public."attempt" WHERE "workflowId" = $1 and "attempt" = $2
)
) AND status = 'fail'`,
[RUN_ID, ATTEMPT_NUMBER],
);
client.release();
return result.rows.map((spec) => spec.name);
# In case for any ci job failure, create combined failed spec
- name: Combine all specs for CI
id: combine_ci
if: needs.ci-test.result != 'success'
run: |
failed_specs=$(echo ${{steps.failed_specs.outputs.result}} | sed 's/\[\|\]//g' | tr -d ' ' | tr ',' '\n')
while read -r line; do
echo "$line" >> ~/combined_failed_spec_ci
done <<< "$failed_specs"
if [[ -z $(grep '[^[:space:]]' ~/combined_failed_spec_ci) ]] ; then
echo "specs_failed=0" >> $GITHUB_OUTPUT
else
echo "specs_failed=1" >> $GITHUB_OUTPUT
fi
# Upload combined failed CI spec list to a file
# This is done for debugging
- name: Upload combined failed spec
if: needs.ci-test.result != 'success'
uses: actions/upload-artifact@v4
with:
name: combined_failed_spec_ci
path: ~/combined_failed_spec_ci
overwrite: true
- name: Get latest flaky tests
shell: bash
run: |
curl --request POST --url https://yatin-s-workspace-jk8ru5.us-east-1.xata.sh/db/CypressKnownFailures:main/tables/CypressKnownFailuires/query --header 'Authorization: Bearer ${{ secrets.XATA_TOKEN }}' --header 'Content-Type: application/json'|jq -r |grep Spec|cut -d ':' -f 2 2> /dev/null|sed 's/"//g'|sed 's/,//g' > ~/knownfailures
# Verify CI test failures against known failures
- name: Verify CI test failures against known failures
if: needs.ci-test.result != 'success'
shell: bash
run: |
new_failed_spec_env="$(comm -1 -3 <(sort ~/knownfailures) <(sort -u ~/combined_failed_spec_ci) | sed 's/|cypress|cypress/\n/g' | sed 's/^/<li>/')"
echo "$new_failed_spec_env"
echo "new_failed_spec_env<<EOF" >> $GITHUB_ENV
echo "$new_failed_spec_env" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Modify test response in the PR with new CI failures
if: needs.ci-test.result != 'success' && steps.combine_ci.outputs.specs_failed == '1'
uses: actions/github-script@v7
env:
NODE_PATH: "${{ github.workspace }}/.github/workflows/scripts"
BODY: |
Some tests have failed.
Workflow run: <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>
Commit: ${{ github.event.pull_request.head.sha }}
<a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=${{ github.run_id }}&attempt=${{ github.run_attempt }}&selectiontype=test&testsstatus=failed&specsstatus=fail" target="_blank">Cypress dashboard</a>.
Tags: ${{ inputs.tags }}
Spec: ${{ inputs.spec }}
The following are new failures, please fix them before merging the PR: <ol>
${{env.new_failed_spec_env}}</ol>
<a href="https://internal.appsmith.com/app/cypress-dashboard/identified-flaky-tests-65890b3c81d7400d08fa9ee3?branch=master" target="_blank">List of identified flaky tests</a>.
with:
script: |
require("write-cypress-status.js")({core, context, github}, "caution", process.env.BODY)
core.setFailed()
- name: Modify test response in the PR when ci-test is failed but no specs found
if: needs.ci-test.result != 'success' && steps.combine_ci.outputs.specs_failed == '0'
uses: actions/github-script@v7
env:
NODE_PATH: "${{ github.workspace }}/.github/workflows/scripts"
BODY: |
Workflow run: <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>
Commit: ${{ github.event.pull_request.head.sha }}
<a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=${{ github.run_id }}&attempt=${{ github.run_attempt }}" target="_blank">Cypress dashboard</a>.
Tags: ${{ inputs.tags }}
Spec: ${{ inputs.spec }}
It seems like **no tests ran** 😔. We are not able to recognize it, please check <a href="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" target="_blank">workflow here</a>.
with:
script: |
require("write-cypress-status.js")({core, context, github}, "warning", process.env.BODY)
core.setFailed()
- name: Modify test response in the PR when ci-test is success
if: needs.ci-test.result == 'success' && steps.combine_ci.outputs.specs_failed == '0'
uses: actions/github-script@v7
env:
NODE_PATH: "${{ github.workspace }}/.github/workflows/scripts"
BODY: |
All cypress tests have passed! 🎉 🎉 🎉
Workflow run: <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>
Commit: ${{ github.event.pull_request.head.sha }}
<a href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=${{ github.run_id }}&attempt=${{ github.run_attempt }}" target="_blank">Cypress dashboard</a>.
Tags: `${{ inputs.tags }}`
Spec: ${{ inputs.spec }}
with:
script: |
require("write-cypress-status.js")({core, context, github}, "tip", process.env.BODY)
- name: Check ci-test set status
if: needs.ci-test.result != 'success'
run: exit 1