name: CI on: push: branches: - master - "2.9" pull_request: branches: - master - "2.9" workflow_dispatch: permissions: contents: read jobs: build: permissions: checks: write # for coverallsapp/github-action to create new checks contents: read # for dorny/paths-filter to fetch a list of changed files pull-requests: read # for dorny/paths-filter to read pull requests runs-on: ${{ matrix.os }} outputs: coveralls: ${{ steps.changes.outputs.src }} strategy: matrix: os: [ubuntu-latest, windows-latest] fail-fast: false steps: - uses: actions/checkout@v3 - name: Use Node.js uses: actions/setup-node@v3 with: cache: npm - uses: dorny/paths-filter@v2 id: changes with: filters: | docs: - 'docs/**' - 'package.json' - 'tsconfig.json' src: - 'src/**' - 'package.json' test: - 'test/**' - 'karma.conf.js' - 'package.json' types: - 'types/**' - 'package.json' - 'tsconfig.json' - name: Install run: npm ci - name: Lint run: npm run lint - name: Build run: npm run build - name: Test if: | (steps.changes.outputs.src == 'true' || steps.changes.outputs.test == 'true') && runner.os != 'Windows' run: | npm run build if [ "${{ runner.os }}" == "macOS" ]; then npm run test-ci --browsers chrome,safari else xvfb-run --auto-servernum npm run test-ci fi shell: bash - name: Package if: steps.changes.outputs.docs == 'true' run: | npm run docs npm pack - name: Coveralls Parallel - Chrome if: | steps.changes.outputs.src == 'true' && runner.os != 'Windows' uses: coverallsapp/github-action@master with: github-token: ${{ secrets.github_token }} path-to-lcov: './coverage/chrome/lcov.info' flag-name: ${{ matrix.os }}-chrome parallel: true - name: Coveralls Parallel - Firefox if: | steps.changes.outputs.src == 'true' && runner.os != 'Windows' uses: coverallsapp/github-action@master with: github-token: ${{ secrets.github_token }} path-to-lcov: './coverage/firefox/lcov.info' flag-name: ${{ matrix.os }}-firefox parallel: true finish: permissions: checks: write # for coverallsapp/github-action to create new checks needs: build runs-on: ubuntu-latest steps: - name: Coveralls Finished if: needs.build.outputs.coveralls == 'true' uses: coverallsapp/github-action@master with: github-token: ${{ secrets.github_token }} parallel-finished: true