From 645e2d3d6b760e24e1df04b27a258c888dc848c2 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Thu, 23 Mar 2023 22:48:27 +0100 Subject: [PATCH] ci: lighthouse score --- .github/workflows/issue-triage.yml | 1 - .github/workflows/lighthouse.yml | 88 ++++++++++++++++++++++++++++++ .github/workflows/lock.yml | 4 -- 3 files changed, 88 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/lighthouse.yml diff --git a/.github/workflows/issue-triage.yml b/.github/workflows/issue-triage.yml index d8ac79f50..6bc620222 100644 --- a/.github/workflows/issue-triage.yml +++ b/.github/workflows/issue-triage.yml @@ -2,7 +2,6 @@ name: 'Issue Labeler' on: issues: types: [opened] - jobs: issue-triage: runs-on: ubuntu-latest diff --git a/.github/workflows/lighthouse.yml b/.github/workflows/lighthouse.yml new file mode 100644 index 000000000..d9ec18a76 --- /dev/null +++ b/.github/workflows/lighthouse.yml @@ -0,0 +1,88 @@ +name: 'Lighthouse Audit' +on: + issue_comment: + types: [created, edited] +jobs: + lighthouse_audit: + name: 'Lighthouse Audit' + if: ${{ github.event.issue.pull_request }} + runs-on: ubuntu-latest + steps: + - name: Get Vercel preview URL + id: get_preview_url + uses: actions/github-script@v3 + with: + script: | + const comment = context.payload.comment; + const regex = /https:\/\/[a-z0-9-]+\.vercel\.app/g; + const matches = comment.body.match(regex); + let previewUrl = ""; + if (matches && matches.length) { + previewUrl = matches[0]; + console.log('Preview url found:', previewUrl); + } + console.log("No preview url found."); + core.setOutput('vercel_preview_url', previewUrl); + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Add comment to PR + if: ${{ steps.get_preview_url.outputs.vercel_preview_url != '' }} + id: loading_comment_to_pr + uses: marocchino/sticky-pull-request-comment@v1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + number: ${{ github.event.issue.number }} + header: lighthouse + message: | + Running Lighthouse audit... + + - name: Checkout repository + if: ${{ steps.get_preview_url.outputs.vercel_preview_url != '' }} + uses: actions/checkout@v3 + + - name: Audit preview URL with Lighthouse + if: ${{ steps.get_preview_url.outputs.vercel_preview_url != '' }} + id: lighthouse_audit + uses: treosh/lighthouse-ci-action@v3 + with: + urls: | + ${{ steps.get_preview_url.outputs.vercel_preview_url }} + uploadArtifacts: true + temporaryPublicStorage: true + + - name: Format lighthouse score + if: ${{ steps.get_preview_url.outputs.vercel_preview_url != '' }} + id: format_lighthouse_score + uses: actions/github-script@v3 + with: + script: | + const result = ${{ steps.lighthouse_audit.outputs.manifest }}[0].summary + const links = ${{ steps.lighthouse_audit.outputs.links }} + const formatResult = (res) => Math.round((res * 100)) + Object.keys(result).forEach(key => result[key] = formatResult(result[key])) + const score = res => res >= 90 ? '🟢' : res >= 50 ? '🟠' : '🔴' + const comment = [ + `⚡️ [Lighthouse report](${Object.values(links)[0]}) for the changes in this PR:`, + '| Category | Score |', + '| --- | --- |', + `| ${score(result.performance)} Performance | ${result.performance} |`, + `| ${score(result.accessibility)} Accessibility | ${result.accessibility} |`, + `| ${score(result['best-practices'])} Best practices | ${result['best-practices']} |`, + `| ${score(result.seo)} SEO | ${result.seo} |`, + `| ${score(result.pwa)} PWA | ${result.pwa} |`, + ' ', + `*Lighthouse ran on [${Object.keys(links)[0]}](${Object.keys(links)[0]})*` + ].join('\n') + core.setOutput("comment", comment); + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Add comment to PR + if: ${{ steps.get_preview_url.outputs.vercel_preview_url != '' }} + id: comment_to_pr + uses: marocchino/sticky-pull-request-comment@v1 + with: + number: ${{ github.event.issue.number }} + header: lighthouse + message: | + ${{ steps.format_lighthouse_score.outputs.comment }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml index 28219577d..c7f038c94 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock.yml @@ -1,16 +1,12 @@ name: Lock Ancient Issues - on: schedule: - cron: '0 16 * * *' workflow_dispatch: - permissions: issues: write - concurrency: group: lock - jobs: action: runs-on: ubuntu-latest