name: Mutation sweep on: schedule: - cron: "47 4 * * *" workflow_dispatch: permissions: contents: read concurrency: group: mutation-${{ github.ref }} cancel-in-progress: false env: HUSKY: "0" # Writes only on the default branch for push, schedule, manual dispatch, # and workflow_call. Pull requests get an empty token and remote read-only mode. TURBO_TOKEN: "${{ (github.ref == format('refs/heads/{0}', github.event.repository.default_branch) && (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call')) && secrets.TURBO_TOKEN || '' }}" TURBO_TEAM: ${{ vars.TURBO_TEAM }} TURBO_CACHE: "${{ (github.ref == format('refs/heads/{0}', github.event.repository.default_branch) && (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call')) && 'local:rw,remote:rw' || 'local:rw,remote:r' }}" jobs: mutation: name: Mutation sweep (${{ matrix.suite }}) runs-on: ubuntu-latest timeout-minutes: 60 strategy: fail-fast: false max-parallel: 2 matrix: include: - suite: reverse-tools config: stryker.config.mjs - suite: reverse-tools-semantics config: stryker.semantics.config.mjs steps: - uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4.4.0 - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version-file: .nvmrc - name: Cache npm package downloads uses: ./.github/actions/npm-cache - run: npm ci - run: npm run test:prepare - name: Run the complete configuration env: MUTATION_CONFIG: ${{ matrix.config }} run: | node scripts/prepare-reverse-tools-mutation.mjs npx --no-install stryker run "${MUTATION_CONFIG}" - name: Require both reports from the completed sweep env: REPORT_BASE: reports/mutation/${{ matrix.suite }} run: | test -s "${REPORT_BASE}.json" test -s "${REPORT_BASE}.html" - name: Retain available mutation diagnostics if: ${{ !cancelled() }} uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: mutation-${{ matrix.suite }}-${{ github.run_attempt }} path: | reports/mutation/${{ matrix.suite }}.json reports/mutation/${{ matrix.suite }}.html if-no-files-found: warn retention-days: 7