# NOTE: Changes to this file should also be applied to './test-windows.yml' and './test-translations.yml' name: Node.js Tests on: workflow_dispatch: push: branches: - main pull_request: branches-ignore: - translations env: CI: true jobs: see_if_should_skip: continue-on-error: true runs-on: ubuntu-latest # Map a step output to a job output outputs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: - id: skip_check uses: fkirc/skip-duplicate-actions@36feb0d8d062137530c2e00bd278d138fe191289 with: cancel_others: 'false' github_token: ${{ github.token }} paths: '[".github/workflows/test.yml",".node-version", ".npmrc", "app.json", "content/**", "data/**","lib/**", "Dockerfile", "feature-flags.json", "Gemfile", "Gemfile.lock", "middleware/**", "node_modules/**","package.json", "package-lock.json", "server.js", "tests/**", "translations/**", "Procfile", "webpack.config.js"]' lint: needs: see_if_should_skip runs-on: ubuntu-latest steps: # Each of these ifs needs to be repeated at each step to make sure the required check still runs # Even if if doesn't do anything - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Check out repo uses: actions/checkout@a81bbbf8298c0fa03ea29cdc473d45769f953675 - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Setup node uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d with: node-version: 14.x - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Get npm cache directory id: npm-cache run: | echo "::set-output name=dir::$(npm config get cache)" - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Cache node modules uses: actions/cache@d1255ad9362389eac595a9ae406b8e8cb3331f16 with: path: ${{ steps.npm-cache.outputs.dir }} key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Install dependencies run: npm ci - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' && GITHUB_REPOSITORY == 'github/docs-internal' }} name: Clone early access run: npm run heroku-prebuild env: DOCUBOT_REPO_PAT: ${{ secrets.DOCUBOT_REPO_PAT }} - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Run linter run: npx standard - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Check dependencies run: npm run check-deps test: needs: see_if_should_skip runs-on: ubuntu-latest strategy: fail-fast: false matrix: test-group: [content, meta, rendering, routing, unit, links-and-images] steps: # Each of these ifs needs to be repeated at each step to make sure the required check still runs # Even if if doesn't do anything - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Check out repo uses: actions/checkout@a81bbbf8298c0fa03ea29cdc473d45769f953675 - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Setup node uses: actions/setup-node@56899e050abffc08c2b3b61f3ec6a79a9dc3223d with: node-version: 14.x - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Get npm cache directory id: npm-cache run: | echo "::set-output name=dir::$(npm config get cache)" - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Cache node modules uses: actions/cache@d1255ad9362389eac595a9ae406b8e8cb3331f16 with: path: ${{ steps.npm-cache.outputs.dir }} key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Install dependencies run: npm ci - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' && GITHUB_REPOSITORY == 'github/docs-internal' }} name: Clone early access run: npm run heroku-prebuild env: DOCUBOT_REPO_PAT: ${{ secrets.DOCUBOT_REPO_PAT }} - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Run build script run: npm run build - if: ${{ needs.see_if_should_skip.outputs.should_skip != 'true' }} name: Run tests run: npx jest tests/${{ matrix.test-group }}/ - name: Send Slack notification if workflow fails uses: rtCamp/action-slack-notify@e17352feaf9aee300bf0ebc1dfbf467d80438815 if: failure() && github.ref == 'early-access' env: SLACK_WEBHOOK: ${{ secrets.DOCS_ALERTS_SLACK_WEBHOOK }} SLACK_MESSAGE: "Tests are failing on the `early-access` branch. https://github.com/github/docs-internal/tree/early-access"