Configure Codecov #346
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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: | |
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 snapshots | |
uses: actions/upload-artifact@v3 | |
with: | |
name: visual-snapshots | |
path: visual-snapshots | |
- name: Upload to B2 | |
uses: shallwefootball/s3-upload-action@master | |
id: B2 | |
with: | |
aws_key_id: ${{ secrets.AWS_KEY_ID }} | |
aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY}} | |
aws_bucket: ${{ vars.AWS_BUCKET }} | |
endpoint: ${{ vars.AWS_ENDPOINT }} | |
source_dir: "visual-snapshots" | |
destination_dir: "30-days/${{ github.repository }}/${{ github.run_id }}" | |
- name: Generate snapshots comment | |
run: ./bin/snapshots-comment '${{steps.B2.outputs.object_locations}}' | |
- uses: jwalton/gh-find-current-pr@v1 | |
id: finder | |
- uses: marocchino/sticky-pull-request-comment@v2 | |
with: | |
number: ${{ steps.finder.outputs.pr }} | |
header: "Visual Snapshots" | |
path: "./visual-snapshots.tmp" | |
- name: Job summary (visuals) | |
run: cat visual-snapshots.tmp > $GITHUB_STEP_SUMMARY |