# This workflow helps us to be sure that the code of the action we're going to deploy: # 1. Is well-formated # 2. Is linted # 3. Successfully builds # 4. Passes unit-tests # Additionally node packages used by the action can be audited. name: CI on: workflow_call: inputs: operating-systems: description: "Optional input to set list of operating systems whick the workflow uses. Defaults to ['ubuntu-latest', 'windows-latest', 'macos-latest'] if not set" required: false type: string default: "['ubuntu-latest', 'windows-latest', 'macos-latest']" build-command: description: "Optional input to configure build command in case the default one doesn't suit. Set to an empty string if build isn't needed. Multiline syntax is supported" required: false type: string default: "npm run build" enable-prettier: description: "Optional input to enable prettiering process" required: false type: boolean default: true enable-linter: description: "Optional input to enable linting process" required: false type: boolean default: true enable-audit: description: "Optional input to enable npm package audit process" required: false type: boolean default: true node-version: description: "Optional input to set version of node.js. The input syntax corresponds to the setup-node's one." required: false type: string default: "16.x" node-caching: description: "Optional input to set up caching for the setup-node action. The input syntax corresponds to the setup-node's one. Set to an empty string if caching isn't needed" required: false type: string default: "npm" jobs: build: runs-on: ${{matrix.operating-systems}} strategy: fail-fast: false matrix: operating-systems: ${{fromJson(inputs.operating-systems)}} steps: - name: Checkout uses: actions/checkout@v3 - name: Setup Node.js ${{inputs.node-version}} uses: actions/setup-node@v3 with: node-version: ${{inputs.node-version}} cache: ${{inputs.node-caching}} - name: Install dependencies run: npm ci --ignore-scripts - name: Run prettier if: ${{inputs.enable-prettier}} run: npm run format-check - name: Run linter if: ${{inputs.enable-linter}} run: npm run lint - name: Build if: ${{inputs.build-command}} run: ${{inputs.build-command}} - name: Test run: npm run test - name: Audit packages run: npm audit --audit-level=high if: ${{inputs.enable-audit}}