phonenumber 0.3.9+9.0.21

Library for parsing, formatting and validating international phone numbers.
Documentation
name: Build
on:
  push:
    branches:
      - main
  pull_request:

env:
  CARGO_INCREMENTAL: 0
  CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build_and_test:
    name: cargo test
    runs-on: ubuntu-latest
    env:
      RUSTFLAGS: -D warnings
    strategy:
      fail-fast: false
      matrix:
        toolchain: ["stable", "beta"]
        coverage: [false]
        tests: [true]
        proptest_max: [false]
        include:
          # We run the proptests with the stable toolchain on more iterations
          - toolchain: "stable"
            coverage: false
            tests: true
            proptest_max: true
          - toolchain: "nightly"
            coverage: true
            tests: true
          - toolchain: "1.76.0"
            coverage: false
            tests: false
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - uses: actions-rs/toolchain@v1
        with:
          toolchain: ${{ matrix.toolchain }}
          override: true

      - name: Configure CI cache
        uses: Swatinem/rust-cache@v2

      - name: Build all targets
        uses: actions-rs/cargo@v1
        if: ${{ matrix.tests }}
        with:
          command: build
          args: --all-targets

      - name: Build
        uses: actions-rs/cargo@v1
        if: ${{ !matrix.tests }}
        with:
          command: build
          args: --lib --all-features

      - name: Run tests
        uses: actions-rs/cargo@v1
        if: ${{ !matrix.coverage && matrix.tests && !matrix.proptest_max }}
        with:
          command: test
          args: --all-targets --no-fail-fast

      - name: Run tests
        uses: actions-rs/cargo@v1
        if: ${{ !matrix.coverage && matrix.tests && matrix.proptest_max }}
        env:
          PROPTEST_CASES: 65536
        with:
          command: test
          args: --all-targets --release --no-fail-fast

      - name: Install cargo-llvm-cov
        uses: taiki-e/install-action@cargo-llvm-cov
        if: ${{ matrix.coverage && matrix.tests }}

      - name: Run tests with coverage
        run: cargo llvm-cov --all-features --all-targets --lcov --output-path lcov.info
        if: ${{ matrix.coverage && matrix.tests }}

      - name: Upload coverage reports to Codecov with GitHub Action
        uses: codecov/codecov-action@v5
        if: ${{ matrix.coverage }}
        env:
          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
        with:
          files: lcov.info
          fail_ci_if_error: true

  rustfmt:
    name: rustfmt
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Setup Rust toolchain
        run: rustup install stable
      
      - name: Check code format
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: -- --check

  clippy:
    name: clippy
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2
      
      - name: Setup Rust toolchain
        run: rustup install stable
      
      - name: Setup CI cache
        uses: Swatinem/rust-cache@v2

      - name: Run clippy lints
        uses: actions-rs/cargo@v1
        with:
          command: clippy