Skip to content

Visual snapshots improvements (part 2) #364

Visual snapshots improvements (part 2)

Visual snapshots improvements (part 2) #364

Workflow file for this run

name: Rust
on:
push:
branches: [ "main", "next" ]
pull_request:
branches: [ "main", "next" ]
permissions:
checks: write
contents: read
pull-requests: write
env:
CARGO_TERM_COLOR: always
jobs:
clippy:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Configure cache
uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: test-${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- uses: giraffate/clippy-action@v1
with:
reporter: github-pr-review
github_token: ${{ secrets.GITHUB_TOKEN }}
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Create local bin directory
run: mkdir -p "${HOME}/.local/bin"
- name: Download markdown-test-report
uses: robinraju/[email protected]
with:
repository: "ctron/markdown-test-report"
tag: "v0.3.8"
fileName: markdown-test-report-linux-amd64
out-file-path: tmp
- name: Install markdown-test-report
run: |
mv tmp/markdown-test-report-linux-amd64 "${HOME}/.local/bin/markdown-test-report"
chmod +x "${HOME}/.local/bin/markdown-test-report"
- name: Download grcov
uses: robinraju/[email protected]
with:
repository: "mozilla/grcov"
tag: "v0.8.18"
fileName: grcov-x86_64-unknown-linux-gnu.tar.bz2
out-file-path: tmp
- name: Install grcov
run: |
tar -xvf tmp/grcov-x86_64-unknown-linux-gnu.tar.bz2
mv grcov "${HOME}/.local/bin"
chmod +x "${HOME}/.local/bin/grcov"
- name: Set up Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: nightly-2023-06-15
- name: Add llvm-tools
run: rustup component add llvm-tools
- name: Configure cache
uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: test-${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Run tests
run: cargo test --verbose -- -Z unstable-options --report-time --format json | tee test-output.json
env:
CARGO_INCREMENTAL: 0
RUSTFLAGS: -Cinstrument-coverage
LLVM_PROFILE_FILE: cargo-test-%p-%m.profraw
- name: Process code coverage with grcov
run: grcov . --binary-path ./target/debug/deps/ -s . -t cobertura --branch --ignore-not-existing --ignore '../*' --ignore "/*" -o target/cobertura.xml
- name: Upload coverage reports to Codecov
uses: codecov/codecov-action@v3
with:
files: target/cobertura.xml
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- name: Job summary (tests)
if: ${{ always() }}
run: "[ -f test-output.json ] && markdown-test-report --no-front-matter --output - >> $GITHUB_STEP_SUMMARY"
continue-on-error: true
build-binary:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Rust
uses: dtolnay/rust-toolchain@stable
- name: Configure cache
uses: actions/cache@v3
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: test-${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Compile binary
run: cargo build --release
- name: Store binary artifact
uses: actions/upload-artifact@v3
with:
name: paper-age-binary
path: target/release/paper-age
visual-snapshots:
runs-on: ubuntu-latest
needs: [build-binary]
env:
PAPERAGE_PASSPHRASE: supersecret
steps:
- uses: actions/checkout@v3
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "3.2"
- name: Install latest PaperAge release
uses: robinraju/[email protected]
with:
repository: "matiaskorhonen/paper-age"
latest: true
extract: true
fileName: paper-age-x86_64-unknown-linux-gnu.tar.gz
out-file-path: tmp
- name: Move the release binary to bin
run: mv tmp/paper-age bin/paper-age-release
- name: Install pdfium-cli
uses: robinraju/[email protected]
with:
repository: "klippa-app/pdfium-cli"
tag: "v0.1.1"
fileName: pdfium-linux-x64
out-file-path: bin
- name: Make PDFium executable
run: chmod u+x bin/pdfium-linux-x64
- name: Download PaperAge binary for this branch
uses: actions/download-artifact@v3
with:
name: paper-age-binary
- name: Make the binary executable
run: chmod u+x paper-age
- name: Generate PDFs
run: |
mkdir -p visual-snapshots
echo "Hello World" | ./paper-age --title="A4 secret" --page-size=a4 --output=visual-snapshots/a4-current.pdf
echo "Hello World" | ./paper-age --title="Letter secret" --page-size=letter --output=visual-snapshots/letter-current.pdf
echo "Hello World" | ./bin/paper-age-release --title="A4 secret" --page-size=a4 --output=visual-snapshots/a4-release.pdf
echo "Hello World" | ./bin/paper-age-release --title="Letter secret" --page-size=letter --output=visual-snapshots/letter-release.pdf
- name: Convert the PDFs to PNGs
run: |
for f in visual-snapshots/*.pdf; do
echo "Converting $f to PNG"
./bin/pdfium-linux-x64 render "$f" "${f%.*}.png" --combine-pages --dpi 300 --file-type png
done
- name: Generate image diffs
run: |
for f in visual-snapshots/*-current.png; do
echo "Comparing ${f/-current.png/-release.png} to $f"
npx --package=odiff-bin --yes -- odiff --parsable-stdout --threshold=0.5 "${f/-current.png/-release.png}" "$f" "${f/-current.png/-diff.png}" || true
done
- name: Save PR number
run: |
mkdir -p ./pr
echo ${{ github.event.number }} > ./visual-snapshots/PR.txt
- name: Save snapshots
uses: actions/upload-artifact@v3
with:
name: visual-snapshots
path: visual-snapshots