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