on:
  pull_request:
    branches:
      - master
  workflow_call:

name: Build

jobs:
  check:
    name: Check & Lint
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2

      - name: Install PAM dev files
        run: sudo apt-get install -y libpam0g-dev

      - name: Use cargo cache
        uses: actions/cache@v2
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            target/
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

      - name: Install stable toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true

      - name: Run cargo check
        uses: actions-rs/cargo@v1
        with:
          command: check
          args: --manifest-path pam/Cargo.toml

      - name: Run cargo test
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --manifest-path pam/Cargo.toml

      - name: Run cargo check on pam-http
        uses: actions-rs/cargo@v1
        with:
          command: check
          args: --manifest-path pam-http/Cargo.toml

      - name: Run cargo check on pam-sober
        uses: actions-rs/cargo@v1
        with:
          command: check
          args: --manifest-path pam-sober/Cargo.toml

      - name: Run cargo fmt
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --manifest-path pam/Cargo.toml --all --check

      - name: Run cargo clippy
        uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --manifest-path pam/Cargo.toml -- -D warnings
  build:
    needs: check
    runs-on: ubuntu-latest
    steps:
      - name: Use cargo cache
        uses: actions/cache@v2
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            target/
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}

      - name: Install stable toolchain
        uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: stable
          override: true
      - name: Publish module
        uses: katyo/publish-crates@v1
        with:
          registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}
          check-repo: ${{ github.event_name == 'push' }}
          ignore-unpublished-changes: true
          # Only publish pam module, as pam-http and pam-sober are example projects
          args: --package pam-bindings

