From 4e74440924e840f53dff83d53273298a42e2bf70 Mon Sep 17 00:00:00 2001 From: OnkarRuikar <87750369+OnkarRuikar@users.noreply.github.com> Date: Fri, 28 Jul 2023 17:17:42 +0530 Subject: [PATCH] Feature: provide automated PR reivews for linting related changes --- .github/workflows/pr-check_markdownlint.yml | 50 ---------- .github/workflows/pr-review-lint.yml | 103 ++++++++++++++++++++ 2 files changed, 103 insertions(+), 50 deletions(-) delete mode 100644 .github/workflows/pr-check_markdownlint.yml create mode 100644 .github/workflows/pr-review-lint.yml diff --git a/.github/workflows/pr-check_markdownlint.yml b/.github/workflows/pr-check_markdownlint.yml deleted file mode 100644 index abdbff3e6766866..000000000000000 --- a/.github/workflows/pr-check_markdownlint.yml +++ /dev/null @@ -1,50 +0,0 @@ -name: Markdownlint (PR files) - -on: - pull_request: - branches: - - main - paths: - - .nvmrc - - "**/*.md" - -jobs: - lint-docs: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - - name: Get changed files - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - BASE_SHA: ${{ github.event.pull_request.base.sha }} - HEAD_SHA: ${{ github.event.pull_request.head.sha }} - run: | - # Use the GitHub API to get the list of changed files - # documenation: https://docs.github.com/rest/commits/commits#compare-two-commits - DIFF_DOCUMENTS=$(gh api repos/{owner}/{repo}/compare/${{ env.BASE_SHA }}...${{ env.HEAD_SHA }} \ - --jq '.files | .[] | select(.status|IN("added", "modified", "renamed", "copied", "changed")) | .filename') - # filter out files that are not markdown - DIFF_DOCUMENTS=$(echo "${DIFF_DOCUMENTS}" | egrep -i "^files/.*\.md$" | xargs) - echo "DIFF_DOCUMENTS=${DIFF_DOCUMENTS}" >> $GITHUB_ENV - - - name: Setup Node.js environment - uses: actions/setup-node@v3 - with: - node-version-file: ".nvmrc" - cache: yarn - - - name: Install all yarn packages - run: yarn --frozen-lockfile - env: - # https://github.com/microsoft/vscode-ripgrep#github-api-limit-note - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - name: Lint markdown files - run: | - echo "::add-matcher::.github/workflows/markdownlint-problem-matcher.json" - files_to_lint="${{ env.DIFF_DOCUMENTS }}" - yarn markdownlint-cli2 ${files_to_lint} - echo "Linting front-matter" - node scripts/front-matter_linter.js ${files_to_lint} diff --git a/.github/workflows/pr-review-lint.yml b/.github/workflows/pr-review-lint.yml new file mode 100644 index 000000000000000..91075b6a59a28a3 --- /dev/null +++ b/.github/workflows/pr-review-lint.yml @@ -0,0 +1,103 @@ +name: Add lint reviews to PRs + +on: + pull_request: + branches: + - main + paths: + - .nvmrc + - "**/*.md" + +jobs: + lint-docs: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Get changed files + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BASE_SHA: ${{ github.event.pull_request.base.sha }} + HEAD_SHA: ${{ github.event.pull_request.head.sha }} + run: | + # Use the GitHub API to get the list of changed files + # documentation: https://docs.github.com/rest/commits/commits#compare-two-commits + DIFF_DOCUMENTS=$(gh api repos/{owner}/{repo}/compare/${{ env.BASE_SHA }}...${{ env.HEAD_SHA }} \ + --jq '.files | .[] | select(.status|IN("added", "modified", "renamed", "copied", "changed")) | .filename') + # filter out files that are not markdown + DIFF_DOCUMENTS=$(echo "${DIFF_DOCUMENTS}" | egrep -i "^files/.*\.md$" | xargs) + echo "DIFF_DOCUMENTS=${DIFF_DOCUMENTS}" >> $GITHUB_ENV + + - name: Setup Node.js environment + uses: actions/setup-node@v3 + with: + node-version-file: ".nvmrc" + cache: yarn + + - name: Install all yarn packages + run: yarn --frozen-lockfile + env: + # https://github.com/microsoft/vscode-ripgrep#github-api-limit-note + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Lint and format markdown files + run: | + #echo "::add-matcher::.github/workflows/markdownlint-problem-matcher.json" + echo "Running markdownlint --fix" + files_to_lint="${{ env.DIFF_DOCUMENTS }}" + MD_LINT_STATUS=0 + MD_LINT_LOG=$(yarn markdownlint-cli2 --fix ${files_to_lint} 2>&1) || MD_LINT_STATUS=1 + echo "MD_LINT_LOG<> $GITHUB_ENV + echo "${MD_LINT_LOG}" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + echo "MD_LINT_STATUS=${MD_LINT_STATUS}" >> $GITHUB_ENV + + echo "Linting front-matter" + FM_LINT_STATUS=0 + FM_LINT_LOG=$(node scripts/front-matter_linter.js --fix true ${files_to_lint} 2>&1) || FM_LINT_STATUS=1 + echo "FM_LINT_LOG<> $GITHUB_ENV + echo "${FM_LINT_LOG}" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + echo "FM_LINT_STATUS=${FM_LINT_STATUS}" >> $GITHUB_ENV + + echo "Running Prettier" + yarn prettier -w ${files_to_lint} + + - name: Setup reviewdog + uses: reviewdog/action-setup@v1 + with: + reviewdog_version: latest + + - name: Suggest changes using diff + env: + REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + TMPFILE=$(mktemp) + git diff >"${TMPFILE}" + git stash -u && git stash drop + echo "Running rd" + reviewdog \ + -name="mdn-linter" \ + -f=diff \ + -f.diff.strip=1 \ + -reporter=github-pr-review < "${TMPFILE}" + + - name: Add reviews for markdonwlint errors + if: env.MD_LINT_STATUS == '1' + env: + REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + echo "${{ env.MD_LINT_LOG }}" | \ + reviewdog \ + -efm="%f:%l:%c %m" \ + -efm="%f:%l %m" \ + -name="markdownlint" \ + -diff="git diff" \ + -reporter="github-pr-review" + + - name: Log and fail if front-matter linter fails + if: env.FM_LINT_STATUS == '1' + run: | + echo "${{ env.FM_LINT_LOG }}" + exit 1