From 53908598494fdf432555ae8ff15bb3c8a0737965 Mon Sep 17 00:00:00 2001 From: Gusev Yaroslav <59017579+GoldenJaden@users.noreply.github.com> Date: Sat, 25 Nov 2023 03:58:57 +0700 Subject: [PATCH] feat: Added CI for all packages (#62) * first commit * Removed excess flow * fix(playground): uncommented lint job * style(model): renamed Model package workflow * feat: add working directory input on composite actions, add a name of package on mutation test comment * fix: add proper comment_tag to mutation tests and custom-title to unit tests to distinguish test reports for different packages * style: put name of package in block in unit test reports * style: changed workflows' names --- .github/actions/build/action.yml | 21 ++++ .github/actions/lint/action.yml | 19 +++ .../mutation-tests-all-files/action.yml | 22 ++++ .../mutation-tests-changed-files/action.yml | 99 +++++++++++++++ .github/actions/unit-tests/action.yml | 29 +++++ .github/workflows/dom-adapters.yml | 53 ++++++++ .github/workflows/model-merge.yml | 58 --------- .github/workflows/model.yml | 115 ++++-------------- .github/workflows/playground.yml | 23 ++++ 9 files changed, 292 insertions(+), 147 deletions(-) create mode 100644 .github/actions/build/action.yml create mode 100644 .github/actions/lint/action.yml create mode 100644 .github/actions/mutation-tests-all-files/action.yml create mode 100644 .github/actions/mutation-tests-changed-files/action.yml create mode 100644 .github/actions/unit-tests/action.yml create mode 100644 .github/workflows/dom-adapters.yml delete mode 100644 .github/workflows/model-merge.yml create mode 100644 .github/workflows/playground.yml diff --git a/.github/actions/build/action.yml b/.github/actions/build/action.yml new file mode 100644 index 00000000..1bf440e2 --- /dev/null +++ b/.github/actions/build/action.yml @@ -0,0 +1,21 @@ +name: "Build" +inputs: + package-name: + description: 'Name of the package' + required: true +runs: + using: "composite" + steps: + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version-file: .nvmrc + + - name: Setup environment + uses: ./.github/actions/setup + + - name: Build the package with dependencies + env: + STRYKER_DASHBOARD_API_KEY: ${{ inputs.stryker_dashboard_api_key }} + shell: bash + run: yarn workspaces foreach -Rpt --from '${{ inputs.package-name }}' run build \ No newline at end of file diff --git a/.github/actions/lint/action.yml b/.github/actions/lint/action.yml new file mode 100644 index 00000000..feb4a44c --- /dev/null +++ b/.github/actions/lint/action.yml @@ -0,0 +1,19 @@ +name: "Lint" +inputs: + package-name: + description: 'Name of the package' + required: true +runs: + using: "composite" + steps: + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version-file: .nvmrc + + - name: Setup environment + uses: ./.github/actions/setup + + - name: Run ESLint check + shell: bash + run: yarn workspace ${{ inputs.package-name }} lint:ci diff --git a/.github/actions/mutation-tests-all-files/action.yml b/.github/actions/mutation-tests-all-files/action.yml new file mode 100644 index 00000000..e8b741c3 --- /dev/null +++ b/.github/actions/mutation-tests-all-files/action.yml @@ -0,0 +1,22 @@ +name: Mutation tests for all files +inputs: + package-name: + description: 'Name of the package' + required: true + stryker_dashboard_api_key: + description: 'Stryker dashboard api key' + required: true +runs: + using: "composite" + steps: + - uses: actions/setup-node@v3 + with: + node-version-file: .nvmrc + + - name: Setup environment + uses: ./.github/actions/setup + + - name: Run mutation tests + shell: bash + id: run-mutation-tests + run: yarn workspace ${{ inputs.package-name }} test:mutations --dashboard.version main \ No newline at end of file diff --git a/.github/actions/mutation-tests-changed-files/action.yml b/.github/actions/mutation-tests-changed-files/action.yml new file mode 100644 index 00000000..e4fd88af --- /dev/null +++ b/.github/actions/mutation-tests-changed-files/action.yml @@ -0,0 +1,99 @@ +name: Mutation tests for changed files +inputs: + working-directory: + description: 'Path to the ./packages/name_of_your_package_folder' + required: true + package-name: + description: 'A full name of the package' + required: true + stryker_dashboard_api_key: + description: 'Stryker dashboard api key' + required: true +runs: + using: "composite" + steps: + - uses: actions/setup-node@v3 + with: + node-version-file: .nvmrc + + - name: Setup environment + uses: ./.github/actions/setup + + - name: Get changed files + uses: tj-actions/changed-files@v39.0.0 + id: changed-files + with: + files_yaml: | + src: + - 'src/**/*.ts' + - '!src/**/*.spec.ts' + - '!src/**/__mocks__/**' + separator: "','" + path: ${{ inputs.working-directory }} + + - name: Run mutation tests + if: steps.changed-files.outputs.src_any_changed == 'true' + shell: bash + id: run-mutation-tests + run: yarn workspace ${{ inputs.package-name }} test:mutations --mutate ${{format('''{0}''', steps.changed-files.outputs.src_all_changed_files)}} + continue-on-error: true + + - name: Find current PR's number + uses: jwalton/gh-find-current-pr@v1 + id: findPr + + - name: Comment on successful mutation testing + uses: thollander/actions-comment-pull-request@v2 + env: + STRYKER_DASHBOARD_API_KEY: ${{ inputs.stryker_dashboard_api_key }} + if: steps.changed-files.outputs.src_any_changed == 'true' && steps.run-mutation-tests.outcome == 'success' && ${{ steps.findPr.outputs.number != '' }} + with: + message: | + ✅ Mutation testing passed for `${{ inputs.working-directory }}` + + Report: https://dashboard.stryker-mutator.io/reports/github.com/editor-js/document-model/PR-${{ github.event.number }} + +
+ Mutated files +
+            ${{ join(fromJson(format('[{0}]', format('''{0}''', steps.changed-files.outputs.src_all_changed_files))), '
') }} +
+
+ comment_tag: mutation-tests for `${{ inputs.working-directory }}` + pr_number: ${{ steps.findPr.outputs.number != '' && steps.findPr.outputs.number || '1'}} + + - name: Comment on failed mutation testing + uses: thollander/actions-comment-pull-request@v2 + env: + STRYKER_DASHBOARD_API_KEY: ${{ inputs.stryker_dashboard_api_key }} + if: steps.changed-files.outputs.src_any_changed == 'true' && steps.run-mutation-tests.outcome == 'failure' && ${{ steps.findPr.outputs.number != '' }} + with: + message: | + ❌ Mutation testing hasn't passed score threshold for `${{ inputs.working-directory }}` + + Report: https://dashboard.stryker-mutator.io/reports/github.com/editor-js/document-model/PR-${{ github.event.number }} + +
+ Mutated files +
+            ${{ join(fromJson(format('[{0}]', format('''{0}''', steps.changed-files.outputs.src_all_changed_files))), '
') }} +
+
+ comment_tag: mutation-tests for `${{ inputs.working-directory }}` + pr_number: ${{ steps.findPr.outputs.number != '' && steps.findPr.outputs.number || '1'}} + + - name: Comment on empty changes + uses: thollander/actions-comment-pull-request@v2 + env: + STRYKER_DASHBOARD_API_KEY: ${{ inputs.stryker_dashboard_api_key }} + if: steps.changed-files.outputs.src_any_changed == 'false' && ${{ steps.findPr.outputs.number != '' }} + with: + message: | + ⏭️ No files to mutate for `${{ inputs.working-directory }}` + + comment_tag: mutation-tests for `${{ inputs.working-directory }}` + pr_number: ${{ steps.findPr.outputs.number != '' && steps.findPr.outputs.number || '1'}} + + - if: steps.changed-files.outputs.src_any_changed == 'true' && steps.run-mutation-tests.outcome == 'failure' + shell: bash + run: exit 1 \ No newline at end of file diff --git a/.github/actions/unit-tests/action.yml b/.github/actions/unit-tests/action.yml new file mode 100644 index 00000000..e47ee8e7 --- /dev/null +++ b/.github/actions/unit-tests/action.yml @@ -0,0 +1,29 @@ +name: Unit tests +inputs: + working-directory: + description: 'Path to the ./packages/name_of_your_package_folder' + required: true + package-name: + description: 'A full name of the package' + required: true + +runs: + using: "composite" + steps: + - uses: actions/setup-node@v3 + with: + node-version-file: .nvmrc + - uses: ./.github/actions/setup + + # Find current PR's number + - uses: jwalton/gh-find-current-pr@v1 + id: findPr + + - name: Run unit tests + uses: ArtiomTr/jest-coverage-report-action@v2 + with: + custom-title: Coverage report for `${{ inputs.working-directory }}` + working-directory: ${{ inputs.working-directory }} + test-script: yarn workspace ${{ inputs.package-name }} test + package-manager: yarn + prnumber: ${{ steps.findPr.outputs.number }} \ No newline at end of file diff --git a/.github/workflows/dom-adapters.yml b/.github/workflows/dom-adapters.yml new file mode 100644 index 00000000..2947b41c --- /dev/null +++ b/.github/workflows/dom-adapters.yml @@ -0,0 +1,53 @@ +name: Dom-adapters check +on: + push: + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run ESLint check + uses: ./.github/actions/lint + with: + package-name: '@editorjs/dom-adapters' + + tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run unit tests + uses: ./.github/actions/unit-tests + with: + working-directory: './packages/dom-adapters' + package-name: '@editorjs/dom-adapters' + + mutation-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Run mutation tests for changed files + if: ${{ github.event_name == 'push' }} + uses: ./.github/actions/mutation-tests-changed-files + with: + package-name: '@editorjs/dom-adapters' + working-directory: './packages/dom-adapters' + stryker_dashboard_api_key: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} + + - name: Run mutation tests for all files + if: ${{ github.event_name == 'merge_group' }} + uses: ./.github/actions/mutation-tests-all-files + with: + package-name: '@editorjs/dom-adapters' + working-directory: './packages/dom-adapters' + stryker_dashboard_api_key: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} + + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Build the package + uses: ./.github/actions/build + with: + package-name: '@editorjs/dom-adapters' \ No newline at end of file diff --git a/.github/workflows/model-merge.yml b/.github/workflows/model-merge.yml deleted file mode 100644 index 05c2c877..00000000 --- a/.github/workflows/model-merge.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: Merge queue workflow runner for model package -on: - merge_group: - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 - with: - node-version-file: .nvmrc - - uses: ./.github/actions/setup - - name: Run ESLint check - run: yarn workspace @editorjs/model lint:ci - - tests: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 - with: - node-version-file: .nvmrc - - uses: ./.github/actions/setup - - name: Run unit tests - uses: ArtiomTr/jest-coverage-report-action@v2 - with: - working-directory: ./packages/model - test-script: yarn workspace @editorjs/model test - package-manager: yarn - - mutation-tests: - runs-on: ubuntu-latest - env: - STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 - with: - node-version-file: .nvmrc - - - uses: ./.github/actions/setup - - - name: Run mutation tests - id: run-mutation-tests - run: yarn workspace @editorjs/model test:mutations --dashboard.version main - - - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 - with: - node-version-file: .nvmrc - - uses: ./.github/actions/setup - - name: Build the package - run: yarn workspace @editorjs/model build diff --git a/.github/workflows/model.yml b/.github/workflows/model.yml index 4b42e945..3d4b3c11 100644 --- a/.github/workflows/model.yml +++ b/.github/workflows/model.yml @@ -1,118 +1,55 @@ -name: Model package workflow runner +name: Model check on: - pull_request: + push: + merge_group: jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 - with: - node-version-file: .nvmrc - - uses: ./.github/actions/setup - name: Run ESLint check - run: yarn workspace @editorjs/model lint:ci - + uses: ./.github/actions/lint + with: + package-name: '@editorjs/model' + tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 - with: - node-version-file: .nvmrc - - uses: ./.github/actions/setup + - name: Run unit tests - uses: ArtiomTr/jest-coverage-report-action@v2 + uses: ./.github/actions/unit-tests with: - working-directory: ./packages/model - test-script: yarn test - package-manager: yarn + package-name: '@editorjs/model' + working-directory: './packages/model' mutation-tests: runs-on: ubuntu-latest - env: - STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 - with: - node-version-file: .nvmrc - - name: Setup environment - uses: ./.github/actions/setup - - - name: Get changed files - uses: tj-actions/changed-files@v39.0.0 - id: changed-files + - name: Run mutation tests for changed files + if: ${{ github.event_name == 'push' }} + uses: ./.github/actions/mutation-tests-changed-files with: - files_yaml: | - src: - - 'src/**/*.ts' - - '!src/**/*.spec.ts' - - '!src/**/__mocks__/**' - separator: "','" - path: packages/model - - - name: Run mutation tests - if: steps.changed-files.outputs.src_any_changed == 'true' - id: run-mutation-tests - run: yarn workspace @editorjs/model test:mutations --mutate ${{format('''{0}''', steps.changed-files.outputs.src_all_changed_files)}} - continue-on-error: true + package-name: '@editorjs/model' + working-directory: './packages/model' + stryker_dashboard_api_key: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} - - name: Comment on successful mutation testing - uses: thollander/actions-comment-pull-request@v2 - if: steps.changed-files.outputs.src_any_changed == 'true' && steps.run-mutation-tests.outcome == 'success' + - name: Run mutation tests for all files + if: ${{ github.event_name == 'merge_group' }} + uses: ./.github/actions/mutation-tests-all-files with: - message: | - ## ✅ Mutation testing passed - - Report: https://dashboard.stryker-mutator.io/reports/github.com/editor-js/document-model/PR-${{ github.event.number }} - -
- Mutated files -
-            ${{ join(fromJson(format('[{0}]', format('''{0}''', steps.changed-files.outputs.src_all_changed_files))), '
') }} -
-
- comment_tag: mutation-tests - - - name: Comment on failed mutation testing - uses: thollander/actions-comment-pull-request@v2 - if: steps.changed-files.outputs.src_any_changed == 'true' && steps.run-mutation-tests.outcome == 'failure' - with: - message: | - ## ❌ Mutation testing hasn't passed score threshold - - Report: https://dashboard.stryker-mutator.io/reports/github.com/editor-js/document-model/PR-${{ github.event.number }} - -
- Mutated files -
-            ${{ join(fromJson(format('[{0}]', format('''{0}''', steps.changed-files.outputs.src_all_changed_files))), '
') }} -
-
- comment_tag: mutation-tests - - - name: Comment on empty changes - uses: thollander/actions-comment-pull-request@v2 - if: steps.changed-files.outputs.src_any_changed == 'false' - with: - message: | - ## ⏭️ No files to mutate - - comment_tag: mutation-tests - - - if: steps.changed-files.outputs.src_any_changed == 'true' && steps.run-mutation-tests.outcome == 'failure' - run: exit 1 + package-name: '@editorjs/model' + working-directory: './packages/model' + stryker_dashboard_api_key: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-node@v3 - with: - node-version-file: .nvmrc - - uses: ./.github/actions/setup - name: Build the package - run: yarn workspace @editorjs/model build + uses: ./.github/actions/build + with: + package-name: '@editorjs/model' diff --git a/.github/workflows/playground.yml b/.github/workflows/playground.yml new file mode 100644 index 00000000..553a8b69 --- /dev/null +++ b/.github/workflows/playground.yml @@ -0,0 +1,23 @@ +name: Playground check +on: + push: + merge_group: + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Run ESLint check + uses: ./.github/actions/lint + with: + package-name: '@editorjs/document-playground' + + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Build the package + uses: ./.github/actions/build + with: + package-name: '@editorjs/document-playground' \ No newline at end of file