Using shot-scraper with GitHub Actions¶
shot-scraper
was designed with GitHub Actions for screenshot automation in mind.
shot-scraper-template¶
The shot-scraper-template template repository can be used to quickly create your own GitHub repository with GitHub Actions configured to take screenshots of a page and write it back to the repository. Read Instantly create a GitHub repository to take screenshots of a web page for details.
Building a workflow from scratch¶
This Actions workflow can be used to install shot-scraper
and its dependencies, take screenshots defined in the shots.yml
file in that repository and then write the resulting screenshots back to the same repository:
name: Take screenshots
on:
push:
workflow_dispatch:
permissions:
contents: write
jobs:
shot-scraper:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v3
with:
python-version: "3.10"
- uses: actions/cache@v3
name: Configure pip caching
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip
- name: Cache Playwright browsers
uses: actions/cache@v3
with:
path: ~/.cache/ms-playwright/
key: ${{ runner.os }}-playwright
- name: Install dependencies
run: |
pip install shot-scraper
shot-scraper install
- name: Take shots
run: |
shot-scraper multi shots.yml
- name: Commit and push
run: |-
git config user.name "Automated"
git config user.email "actions@users.noreply.github.com"
git add -A
timestamp=$(date -u)
git commit -m "${timestamp}" || exit 0
git pull --rebase
git push
The actions/cache@v3
steps set up caching, so your workflow will only download and install the necessary software the very first time it runs.
Optimizing PNGs using Oxipng¶
You can losslessy compress the PNGs generated using shot-scraper
by running them through Oxipng. Add the following steps to the beginning of your workflow to install Oxing:
- name: Cache Oxipng
uses: actions/cache@v3
with:
path: ~/.cargo/
key: ${{ runner.os }}-cargo
- name: Install Oxipng if it is not installed
run: |
which oxipng || cargo install oxipng
Then after running shot-scraper
add this step to compress the images:
- name: Optimize PNGs
run: |-
oxipng -o 4 -i 0 --strip safe *.png
simonw/datasette-screenshots is an example of a repository that uses this pattern.
See Optimizing PNGs in GitHub Actions using Oxipng for more on how this works.