google-maps-scraper 0.3.0

Apify-style Google Maps scraper for Rust — drive a real Chrome via CDP, search by query + scroll the results feed, click each place, extract name/address/phone/website. No API key needed.
Documentation
name: CI

on:
  push:
    branches: [main, master]
  pull_request:

# Least privilege: the workflow only needs to read the repository.
permissions:
  contents: read

env:
  CARGO_TERM_COLOR: always

jobs:
  test:
    name: build & test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          persist-credentials: false
      # dtolnay/rust-toolchain derives the toolchain channel from the action
      # ref, so the channel is also passed explicitly to stay correct when
      # pinned to a commit SHA.
      - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
        with:
          toolchain: stable
      - uses: Swatinem/rust-cache@400e7407cfd7a091e5fbb6afec01ec146c432b7c # v2.7.7
      - name: Build
        run: cargo build --verbose
      - name: Test
        # The unit tests cover the pure parsing helpers and do not launch
        # Chrome, so no browser install is required here.
        run: cargo test --verbose

  lint:
    name: fmt & clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          persist-credentials: false
      - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
        with:
          toolchain: stable
          components: rustfmt, clippy
      - uses: Swatinem/rust-cache@400e7407cfd7a091e5fbb6afec01ec146c432b7c # v2.7.7
      - name: rustfmt
        run: cargo fmt --all -- --check
      - name: clippy
        run: cargo clippy --all-targets -- -D warnings

  audit:
    name: cargo audit
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          persist-credentials: false
      - uses: dtolnay/rust-toolchain@29eef336d9b2848a0b548edc03f92a220660cdb8 # stable
        with:
          toolchain: stable
      - uses: Swatinem/rust-cache@400e7407cfd7a091e5fbb6afec01ec146c432b7c # v2.7.7
      - name: Install cargo-audit
        run: cargo install cargo-audit --locked
      # Audit the committed Cargo.lock if there is one; otherwise generate a
      # lockfile first so `cargo audit` has something to scan. Stays correct
      # whether or not the lockfile is committed.
      - name: Ensure lockfile
        run: test -f Cargo.lock || cargo generate-lockfile
      - name: Audit dependencies
        run: cargo audit