ci: Write Cypress status with the GitHub Script (#34559)
Replacing more of `nefrob/pr-description@v1.1.2` with our GitHub Script. This is moving towards Javascript CI, and hopefully an unit-testable CI. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Chores** - Replaced `nefrob/pr-description` action with `actions/github-script` for handling test responses in PR automation. - Improved guidance on modifying PR body for correct tag usage and linked to relevant documentation. - Enhanced script content to handle warnings and failures more effectively in PR workflow automation. - **New Features** - Updated the `write-cypress-status` script to support different alert types and prefixes, ensuring better validation and formatting of alerts. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
parent
b693377e82
commit
32147ddfdb
89
.github/workflows/pr-automation.yml
vendored
89
.github/workflows/pr-automation.yml
vendored
|
|
@ -60,23 +60,16 @@ jobs:
|
||||||
# In case of missing tags, guides towards correct usage in test response
|
# In case of missing tags, guides towards correct usage in test response
|
||||||
- name: Add test response with tags documentation link
|
- name: Add test response with tags documentation link
|
||||||
if: steps.parseTags.outputs.outcome != 'success'
|
if: steps.parseTags.outputs.outcome != 'success'
|
||||||
uses: nefrob/pr-description@v1.1.2
|
uses: actions/github-script@v7
|
||||||
|
env:
|
||||||
|
NODE_PATH: "${{ github.workspace }}/.github/workflows/scripts"
|
||||||
|
BODY: |
|
||||||
|
The provided command lacks proper tags. Please modify PR body, specifying the tags you want to include or use `/ok-to-test tags="@tag.All"` to run all specs.
|
||||||
|
Explore the [tags documentation](https://www.notion.so/appsmith/Ok-to-test-With-Tags-7c0fc64d4efb4afebf53348cd6252918).
|
||||||
with:
|
with:
|
||||||
content: |
|
script: |
|
||||||
<!-- This is an auto-generated comment: Cypress test results -->
|
require("write-cypress-status.js")({core, context, github}, "warning", process.env.BODY)
|
||||||
> [!WARNING]
|
setFailed()
|
||||||
> The provided command lacks proper tags. Please modify PR body, specifying the tags you want to include or use `/ok-to-test tags="@tag.All"` to run all specs.
|
|
||||||
> Explore the tags documentation [here](https://www.notion.so/appsmith/Ok-to-test-With-Tags-7c0fc64d4efb4afebf53348cd6252918)
|
|
||||||
|
|
||||||
<!-- end of auto-generated comment: Cypress test results -->
|
|
||||||
regex: "<!-- This is an auto-generated comment: Cypress test results -->.*?<!-- end of auto-generated comment: Cypress test results -->"
|
|
||||||
regexFlags: ims
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
# In case of missing tags, exit the workflow with failure
|
|
||||||
- name: Stop the workflow run if tags are not present
|
|
||||||
if: steps.parseTags.outputs.outcome != 'success'
|
|
||||||
run: exit 1
|
|
||||||
|
|
||||||
- name: Check Tags
|
- name: Check Tags
|
||||||
env:
|
env:
|
||||||
|
|
@ -95,23 +88,16 @@ jobs:
|
||||||
# In case of incorrect tags, guides towards correct tags
|
# In case of incorrect tags, guides towards correct tags
|
||||||
- name: Add test response with tags list link
|
- name: Add test response with tags list link
|
||||||
if: steps.checkTags.outputs.outcome == 'failure'
|
if: steps.checkTags.outputs.outcome == 'failure'
|
||||||
uses: nefrob/pr-description@v1.1.2
|
uses: actions/github-script@v7
|
||||||
|
env:
|
||||||
|
NODE_PATH: "${{ github.workspace }}/.github/workflows/scripts"
|
||||||
|
BODY: |
|
||||||
|
The provided command contains incorrect tags. Please modify PR body, specifying the tags you want to include or use `/ok-to-test tags="@tag.All"` to run all specs.
|
||||||
|
Please find [complete list of tags](https://github.com/appsmithorg/appsmith/blob/release/app/client/cypress/tags.js).
|
||||||
with:
|
with:
|
||||||
content: |
|
script: |
|
||||||
<!-- This is an auto-generated comment: Cypress test results -->
|
require("write-cypress-status.js")({core, context, github}, "warning", process.env.BODY)
|
||||||
> [!WARNING]
|
setFailed()
|
||||||
> The provided command contains incorrect tags. Please modify PR body, specifying the tags you want to include or use `/ok-to-test tags="@tag.All"` to run all specs.
|
|
||||||
> Please find complete list of tags [here](https://github.com/appsmithorg/appsmith/blob/release/app/client/cypress/tags.js)
|
|
||||||
|
|
||||||
<!-- end of auto-generated comment: Cypress test results -->
|
|
||||||
regex: "<!-- This is an auto-generated comment: Cypress test results -->.*?<!-- end of auto-generated comment: Cypress test results -->"
|
|
||||||
regexFlags: ims
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
# In case of incorrect tags, exit the workflow with failure
|
|
||||||
- name: Stop the workflow run if tags are incorrect
|
|
||||||
if: steps.checkTags.outputs.outcome == 'failure'
|
|
||||||
run: exit 1
|
|
||||||
|
|
||||||
# In case of a run with all test cases, allocate a larger matrix
|
# In case of a run with all test cases, allocate a larger matrix
|
||||||
- name: Check if @tag.All is present in tags
|
- name: Check if @tag.All is present in tags
|
||||||
|
|
@ -131,24 +117,16 @@ jobs:
|
||||||
# In case of incorrect usage for all test cases, inform the PR author of correct usage
|
# In case of incorrect usage for all test cases, inform the PR author of correct usage
|
||||||
- name: Add test response to use correct @tag.All format
|
- name: Add test response to use correct @tag.All format
|
||||||
if: steps.checkAll.outputs.invalid_tags_all != ''
|
if: steps.checkAll.outputs.invalid_tags_all != ''
|
||||||
uses: nefrob/pr-description@v1.1.2
|
uses: actions/github-script@v7
|
||||||
|
env:
|
||||||
|
NODE_PATH: "${{ github.workspace }}/.github/workflows/scripts"
|
||||||
|
BODY: |
|
||||||
|
Please use `/ok-to-test tags="@tag.All"` to run all specs.
|
||||||
|
Explore the [tags documentation](https://www.notion.so/appsmith/Ok-to-test-With-Tags-7c0fc64d4efb4afebf53348cd6252918).
|
||||||
with:
|
with:
|
||||||
content: |
|
script: |
|
||||||
<!-- This is an auto-generated comment: Cypress test results -->
|
require("write-cypress-status.js")({core, context, github}, "warning", process.env.BODY)
|
||||||
> [!WARNING]
|
core.setFailed()
|
||||||
> Please use `/ok-to-test tags="@tag.All"` to run all specs.
|
|
||||||
> Explore the tags documentation [here](https://www.notion.so/appsmith/Ok-to-test-With-Tags-7c0fc64d4efb4afebf53348cd6252918)
|
|
||||||
|
|
||||||
<!-- end of auto-generated comment: Cypress test results -->
|
|
||||||
|
|
||||||
regex: "<!-- This is an auto-generated comment: Cypress test results -->.*?<!-- end of auto-generated comment: Cypress test results -->"
|
|
||||||
regexFlags: ims
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
# In case of incorrect usage for all test cases, exit the workflow with failure
|
|
||||||
- name: Stop the workflow run if given @tag.All format is wrong
|
|
||||||
if: steps.checkAll.outputs.invalid_tags_all != ''
|
|
||||||
run: exit 1
|
|
||||||
|
|
||||||
# In case of a runnable command, update the PR with run details
|
# In case of a runnable command, update the PR with run details
|
||||||
- name: Add test response with link to workflow run
|
- name: Add test response with link to workflow run
|
||||||
|
|
@ -156,15 +134,14 @@ jobs:
|
||||||
env:
|
env:
|
||||||
NODE_PATH: "${{ github.workspace }}/.github/workflows/scripts"
|
NODE_PATH: "${{ github.workspace }}/.github/workflows/scripts"
|
||||||
BODY: |
|
BODY: |
|
||||||
> [!IMPORTANT]
|
Your tests are running.
|
||||||
> 🟣 🟣 🟣 Your tests are running.
|
Tests running at: <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>
|
||||||
> Tests running at: <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>
|
Commit: ${{ github.event.pull_request.head.sha }}
|
||||||
> Commit: ${{ github.event.pull_request.head.sha }}
|
Workflow: `${{ github.workflow }}`
|
||||||
> Workflow: `${{ github.workflow }}`
|
Tags: `${{ steps.checkAll.outputs.tags }}`
|
||||||
> Tags: `${{ steps.checkAll.outputs.tags }}`
|
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
require("write-cypress-comment.js")({core, context, github}, process.env.BODY)
|
require("write-cypress-status.js")({core, context, github}, "important", process.env.BODY)
|
||||||
|
|
||||||
# Call the workflow to run Cypress tests
|
# Call the workflow to run Cypress tests
|
||||||
perform-test:
|
perform-test:
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,18 @@ const HEADER = '<!-- This is an auto-generated comment: Cypress test results --
|
||||||
const FOOTER = '<!-- end of auto-generated comment: Cypress test results -->';
|
const FOOTER = '<!-- end of auto-generated comment: Cypress test results -->';
|
||||||
const PATTERN = new RegExp(HEADER + ".*?" + FOOTER, "ims");
|
const PATTERN = new RegExp(HEADER + ".*?" + FOOTER, "ims");
|
||||||
|
|
||||||
module.exports = async function({core, context, github}, note) {
|
// Ref: https://github.com/orgs/community/discussions/16925
|
||||||
|
const VALID_ALERT_TYPES = ["note", "tip", "important", "warning", "caution"]
|
||||||
|
|
||||||
|
const ALERT_PREFIXES = {
|
||||||
|
important: "🟣 🟣 🟣 ",
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = async function({core, context, github}, alertType, note) {
|
||||||
|
if (!VALID_ALERT_TYPES.includes(alertType)) {
|
||||||
|
core.setFailed("Invalid alert type: '" + alertType + "'. Allowed: " + VALID_ALERT_TYPES.join(", ") + ".");
|
||||||
|
}
|
||||||
|
|
||||||
const prNumber = context.payload.pull_request?.number;
|
const prNumber = context.payload.pull_request?.number;
|
||||||
|
|
||||||
if (!prNumber) {
|
if (!prNumber) {
|
||||||
|
|
@ -23,7 +34,12 @@ module.exports = async function({core, context, github}, note) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
note = [HEADER, note, FOOTER].join("\n");
|
note = [
|
||||||
|
HEADER,
|
||||||
|
`> [!${alertType.toUpperCase()}]`,
|
||||||
|
((ALERT_PREFIXES[alertType] ?? "") + note.trim()).replaceAll(/^/gm, "> "),
|
||||||
|
FOOTER,
|
||||||
|
].join("\n");
|
||||||
|
|
||||||
if (body.match(PATTERN)) {
|
if (body.match(PATTERN)) {
|
||||||
body = body.replace(PATTERN, note);
|
body = body.replace(PATTERN, note);
|
||||||
Loading…
Reference in New Issue
Block a user