# -------------------------------------------------------------------
# ------------------------------- WARNING ---------------------------
# -------------------------------------------------------------------
#
# This file was automatically generated by gh-workflows using the
# gh-workflow-gen bin. You should add and commit this file to your
# git repository. **DO NOT EDIT THIS FILE BY HAND!** Any manual changes
# will be lost if the file is regenerated.
#
# To make modifications, update your `build.rs` configuration to adjust
# the workflow description as needed, then regenerate this file to apply
# those changes.
#
# -------------------------------------------------------------------
# ----------------------------- END WARNING -------------------------
# -------------------------------------------------------------------

name: ci
env:
  RUSTFLAGS: '-Dwarnings'
'on':
  pull_request:
    types:
    - opened
    - synchronize
    - reopened
    branches:
    - main
  push:
    branches:
    - main
jobs:
  build:
    name: Build and Test
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
    - name: Checkout Code
      uses: actions/checkout@v4
    - name: Setup Rust Toolchain
      uses: actions-rust-lang/setup-rust-toolchain@v1
      with:
        toolchain: nightly
        components: llvm-tools-preview
        cache: 'true'
    - name: Cache cargo-llvm-cov
      uses: actions/cache@v4
      with:
        path: ~/.cargo/bin/cargo-llvm-cov
        key: ${{ runner.os }}-cargo-llvm-cov-${{ hashFiles('**/Cargo.lock') }}
        restore-keys: ${{ runner.os }}-cargo-llvm-cov-
    - name: Install cargo-llvm-cov
      run: cargo install cargo-llvm-cov || true
    - name: Generate coverage
      run: cargo +nightly llvm-cov --all-features --workspace --lcov --output-path lcov.info
    - name: Upload Coverage to Codecov
      uses: Wandalen/wretry.action@v3
      with:
        action: codecov/codecov-action@v4
        attempt_limit: '3'
        attempt_delay: '10000'
        with: |-
          token: ${{ secrets.CODECOV_TOKEN }}
          files: lcov.info
  lint:
    name: Lint
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
    - name: Checkout Code
      uses: actions/checkout@v4
    - name: Setup Rust Toolchain
      uses: actions-rust-lang/setup-rust-toolchain@v1
      with:
        toolchain: nightly
        components: clippy, rustfmt
    - name: Cargo Fmt
      run: cargo +nightly fmt --all --check
    - name: Cargo Clippy
      run: cargo +nightly clippy --all-features --workspace -- -D warnings
  release:
    needs:
    - build
    - lint
    if: ${{ github.ref == 'refs/heads/main' && github.event_name == 'push' }}
    name: Release
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      packages: write
    concurrency:
      group: release-${{github.ref}}
      cancel-in-progress: false
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
    steps:
    - name: Checkout Code
      uses: actions/checkout@v4
    - name: Release Plz
      uses: release-plz/action@v0.5
      with:
        command: release
  release-pr:
    needs:
    - build
    - lint
    if: ${{ github.ref == 'refs/heads/main' && github.event_name == 'push' }}
    name: Release Pr
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
      packages: write
    concurrency:
      group: release-${{github.ref}}
      cancel-in-progress: false
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
    steps:
    - name: Checkout Code
      uses: actions/checkout@v4
    - name: Release Plz
      uses: release-plz/action@v0.5
      with:
        command: release-pr
