collect:
-
startServerCommand - a command that we want Lighthouse
to use in order to start testing.
-
url - An url address that we want Lighthouse to
conduct audits on. For the sake of this tutorial we will
be using http://localhost:3000/ to test just the
homepage but you can also setup other routes here like
http://localhost:3000/categories
-
numberOfRuns - A number that defines how many times
Lighthouse should test the selected url and create a
median out of these results.
upload:
-
target - where do we want to upload the result of our
Lighthouse audit report. By default is set to temporary-
public-storage
Test if the Lighthouse audit is working as expected
yarn lhci:desktop
The command should log following result:
Lighthouse result
And when we visit the link that was created by Lighthouse in the terminal we should see something like this:
Lighthouse report
Well done! Now you have successfully conducted Lighthouse audit locally. As our final step, we will create a Github workflow to run Lighthouse CI on every pull request to main branch.
name: CI
on:
pull_request:
branches:
- main
jobs:
lighthouse:
name: Lighthouse CI
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Install dependencies
run: yarn
- name: lighthouse mobile audit
run: yarn lhci:mobile
env:
LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }}
- name: lighthouse desktop audit
run: yarn lhci:desktop
env:
LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }}
Now, whenever we create a pull request to main branch with this workflow implemented we will automatically trigger a Github Action that will be conducting Lighthouse audits.
Remember the step about authorising Lighthouse application for Github? If you do not have a secret in your repository you would still be able to trigger Github Action but you will not get a nice looking status check from Lighthouse with all metrics. No worries, you would still be able to see the report but you would have to go to the details of the action and go to the link directly.
Lighthouse Github Action
When we add a token in repository settings it should be visible like this:
Github secrets for Lighthouse
To confirm that we did all steps correctly we should see a status report from Lighthouse directly in the pull Github Actions output of a pull request
Lighthouse Github report status
** Keep in mind that the status report from Lighthouse application for Github will provide only one status report even though we have done two tests (for desktop and mobile devices) so you would have to check the second report manually. If you have found a way to display multiple status reports please let me know in the comments and I will update the article accordingly :)
Summary
You have successfully implemented Lighthouse CI auditing that can be triggered both locally and as a Github Action.
This approach would suit most of the cases however to achieve more accurate performance audits you should be conducting Lighthouse tests on a dedicated server to avoid results being affected by the machine capabilities. In other words, if you are running Lighthouse audits on a repository where there are several pull requests/workflows/pushes going on, the result of this audit may not be accurate and this is what we want to avoid. For that you would need a separate machine with Lighthouse Server installed on it. So on a pull request you would trigger this machine to conduct a performance audit and return response to your repository.
Bonus: Using Github Action instead of npm package
Instead of using npm package you could use a Github Action that would esentially do the same thing but wi. The downside to that approach is that you won't be able to test your project locally with lighthouse (unless you are using local github actions package like https://github.com/nektos/act)
name: CI
on:
pull_request:
branches:
- main
jobs:
lighthouse:
runs-on: ubuntu-latest
needs: deploy
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Install dependencies
run: yarn
- name: Build and start the project
run: yarn build && yarn start
- uses: actions/checkout@v2
- name: Audit URLs using Lighthouse
uses: treosh/lighthouse-ci-action@v7
with:
urls: http://localhost:3000
uploadArtifacts: true # save results as an action artifacts
temporaryPublicStorage: true # upload lighthouse audits to google temporary storage