ya-gcp 0.13.0

APIs for using Google Cloud Platform services
Documentation
name: CI

# Bump with `rust-toolchain.toml` and `Cargo.toml` `rust-version` when upgrading.
env:
  RUST_STABLE: "1.88.0"

on:
  push:
    branches:
      - master
      - main
  pull_request:

jobs:
  test:
    runs-on: ${{ matrix.os }}
    # Need to run tests in a container for the Pub/Sub emulator to work:
    # https://stackoverflow.com/a/74341376
    container: ubuntu
    strategy:
      fail-fast: false
      matrix:
        rust_toolchain: ["1.88.0"]
        # some features like emulators and openssl won't work on windows/mac; those are tested in test-xplat
        os: [ubuntu-latest]
        test_flags: ["", "--no-default-features", "--all-features"]
    timeout-minutes: 20
    steps:
      - name: Install dependencies
        run: |
          apt-get update
          apt-get -y install git default-jre curl clang pkg-config libssl-dev
      # Fix for:
      # - https://github.com/actions/checkout/issues/363
      # - https://github.com/actions/checkout/issues/766
      - name: Make workspace a safe git directory
        run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
      - name: Set up Cloud SDK
        uses: google-github-actions/setup-gcloud@v2
      - name: Install Emulators
        run: gcloud components install beta pubsub-emulator bigtable
      - uses: actions/checkout@v4
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          toolchain: ${{ matrix.rust_toolchain }}
      - run: cargo test ${{ matrix.test_flags }} -- --test-threads 1
        env:
          RUSTFLAGS: -Cdebuginfo=0

  test-xplat:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [windows-latest, macOS-latest]
        test_flags: ["--features pubsub,storage"]
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          toolchain: ${{ env.RUST_STABLE }}
      - run: cargo test ${{ matrix.test_flags }}
        env:
          RUSTFLAGS: -Cdebuginfo=0

  format:
    runs-on: ubuntu-latest
    timeout-minutes: 8
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          toolchain: ${{ env.RUST_STABLE }}
          components: rustfmt
      - run: cargo fmt --check

  clippy:
    runs-on: ubuntu-latest
    timeout-minutes: 8
    steps:
      - uses: actions/checkout@v4
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          toolchain: ${{ env.RUST_STABLE }}
          components: clippy
      - run: cargo clippy -- -Dclippy::all

  documentation:
    runs-on: ubuntu-latest
    timeout-minutes: 8
    steps:
      - uses: actions/checkout@v4
      # Crate enables `#![cfg_attr(docsrs, feature(doc_cfg))]` so rustdoc matched to docs.rs still needs nightly.
      # `--no-deps` avoids documenting transitive crates (they can break under newer rustc with removed doc features).
      - uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          toolchain: nightly-2026-02-27
      - run: cargo doc --all-features --no-deps
        env:
          RUSTDOCFLAGS: "--cfg docsrs"