ci: Setup ci-test runner count based on tags defined (#29791)

## Description
- Added logic to handle the runner count based on the tags

#### Type of change
- Workflow files
## Testing
- Workflow run


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

- **New Features**
- Introduced a `tag-check` job to validate the presence of tags in
workflow commands.
- Workflows now comment on PRs with documentation links for tags when
tags are missing.

- **Enhancements**
- Enhanced CI workflows to conditionally run jobs based on tag presence.
  - Added matrix inputs to improve job configuration flexibility.

- **Documentation**
- Added comments to PRs with links to workflow runs when tags are
specified.

- **Refactor**
- Centralized tag and matrix setup across multiple workflows for
consistency.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Saroj 2023-12-22 16:41:34 +05:30 committed by GitHub
parent 8ce2521919
commit a24ec21a74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 95 additions and 69 deletions

View File

@ -13,6 +13,12 @@ on:
description: "These are the optional tags a developer can specify in order to run a subset of all the tests"
required: false
type: string
default: ""
matrix:
description: "Matrix jobs"
required: false
type: string
default: "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59]"
jobs:
ci-test:
@ -29,69 +35,7 @@ jobs:
strategy:
fail-fast: false
matrix:
job:
[
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51,
52,
53,
54,
55,
56,
57,
58,
59,
]
job: ${{ fromJson(inputs.matrix) }}
# Service containers to run with this job. Required for running tests
services:

View File

@ -6,20 +6,58 @@ on:
types: [ok-to-test-command]
jobs:
notify:
tag-check:
runs-on: ubuntu-latest
outputs:
tags: ${{ steps.checkAll.outputs.tags }}
matrix: ${{ steps.checkAll.outputs.matrix }}
steps:
- name: Check if tags arg is present in the command
id: checkTags
run: |
checkArg=`echo '${{toJSON(github.event.client_payload.slash_command.args.named)}}' | jq 'has("tags")'`
echo "tags=$checkArg" >> $GITHUB_OUTPUT
- name: Add a comment on the PR with tags documentation link
if: steps.checkTags.outputs.tags != 'true'
uses: peter-evans/create-or-update-comment@v3
with:
issue-number: ${{ github.event.client_payload.pull_request.number }}
body: |
The provided command lacks any tags. Please execute '/ok-to-test' again, specifying the tags you want to include or use `@tag.All` to run all specs.
Explore the tags documentation [here](https://www.notion.so/appsmith/Ok-to-test-With-Tags-7c0fc64d4efb4afebf53348cd6252918)
- name: Stop the workflow run if tags are not present
if: steps.checkTags.outputs.tags != 'true'
run: exit 1
- name: Check if @tag.All is present in tags
if: steps.checkTags.outputs.tags == 'true'
id: checkAll
run: |
tags="${{ github.event.client_payload.slash_command.args.named.tags }}"
if [[ $tags == *"@tag.All"* ]]; then
echo "tags=" >> $GITHUB_OUTPUT
echo "matrix=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59]" >> $GITHUB_OUTPUT
else
echo "tags=$tags" >> $GITHUB_OUTPUT
echo "matrix=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]" >> $GITHUB_OUTPUT
fi
# This step creates a comment on the PR with a link to this workflow run.
- name: Add a comment on the PR with link to workflow run
if: steps.checkTags.outputs.tags == 'true'
uses: peter-evans/create-or-update-comment@v3
with:
issue-number: ${{ github.event.client_payload.pull_request.number }}
body: |
Tests running at: <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}>.
Workflow: `${{ github.workflow }}`.
Tags: `${{ github.event.client_payload.slash_command.args.named.tags }}`.
Tags: `${{ steps.checkAll.outputs.tags }}`.
server-build:
needs: [tag-check]
if: success()
name: server-build
uses: ./.github/workflows/server-build.yml
secrets: inherit
@ -28,6 +66,8 @@ jobs:
skip-tests: true
client-build:
needs: [tag-check]
if: success()
name: client-build
uses: ./.github/workflows/client-build.yml
secrets: inherit
@ -36,6 +76,8 @@ jobs:
check-test-files: "true"
rts-build:
needs: [tag-check]
if: success()
name: rts-build
uses: ./.github/workflows/rts-build.yml
secrets: inherit
@ -43,6 +85,8 @@ jobs:
pr: ${{ github.event.client_payload.pull_request.number }}
test-appsmithctl:
needs: [tag-check]
if: success()
name: appsmithctl
uses: ./.github/workflows/appsmithctl.yml
secrets: inherit
@ -50,7 +94,7 @@ jobs:
pr: ${{ github.event.client_payload.pull_request.number }}
build-docker-image:
needs: [client-build, server-build, rts-build]
needs: [tag-check, client-build, server-build, rts-build]
# Only run if the build step is successful
if: success()
name: build-docker-image
@ -60,7 +104,7 @@ jobs:
pr: ${{ github.event.client_payload.pull_request.number }}
ci-test:
needs: [build-docker-image]
needs: [tag-check, build-docker-image]
# Only run if the build step is successful
if: success()
name: ci-test
@ -68,7 +112,9 @@ jobs:
secrets: inherit
with:
pr: ${{ github.event.client_payload.pull_request.number }}
tags: ${{ github.event.client_payload.slash_command.args.named.tags }}
tags: ${{ needs.tag-check.outputs.tags }}
matrix: ${{ needs.tag-check.outputs.matrix }}
ci-test-result:
needs: [ci-test]

View File

@ -6,6 +6,12 @@ on:
- cron: "30 00 * * 1-5"
# This line enables manual triggering of this workflow.
workflow_dispatch:
inputs:
tags:
description: "Tags"
required: false
type: string
default: ""
# trigger for pushes to master
push:
@ -17,7 +23,31 @@ on:
- "!app/client/cypress/manual_TestSuite/**"
jobs:
setup:
runs-on: ubuntu-latest
outputs:
tags: ${{ steps.setup.outputs.tags }}
matrix: ${{ steps.setup.outputs.matrix }}
steps:
- name: Set tags and matrix runner
id: setup
run: |
if [ "${{github.event_name}}" == "workflow_dispatch" ]; then
if [[ "${{inputs.tags}}" != "" && "${{inputs.tags}}" != *"@tag.All"* ]]; then
echo "tags=${{inputs.tags}}" >> $GITHUB_OUTPUT
echo "matrix=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]" >> $GITHUB_OUTPUT
else
echo "tags=" >> $GITHUB_OUTPUT
echo "matrix=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59]" >> $GITHUB_OUTPUT
fi
else
echo "tags=" >> $GITHUB_OUTPUT
echo "matrix=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59]" >> $GITHUB_OUTPUT
fi
server-build:
needs: [setup]
if: success()
name: server-build
uses: ./.github/workflows/server-build.yml
secrets: inherit
@ -26,6 +56,8 @@ jobs:
skip-tests: true
client-build:
needs: [setup]
if: success()
name: client-build
uses: ./.github/workflows/client-build.yml
secrets: inherit
@ -33,6 +65,8 @@ jobs:
pr: 0
rts-build:
needs: [setup]
if: success()
name: rts-build
uses: ./.github/workflows/rts-build.yml
secrets: inherit
@ -50,7 +84,7 @@ jobs:
pr: 0
ci-test:
needs: [build-docker-image]
needs: [setup, build-docker-image]
# Only run if the build step is successful
if: success()
name: ci-test
@ -58,6 +92,8 @@ jobs:
secrets: inherit
with:
pr: 0
tags: ${{needs.setup.outputs.tags}}
matrix: ${{needs.setup.outputs.matrix}}
server-unit-tests:
name: server-unit-tests