hrobot 7.0.0

Unofficial Hetzner Robot API client
Documentation
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

name: Test & Tag

jobs:
  lint:
    name: Linting (rustfmt + clippy)
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

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

      - name: Install rustup components (rustfmt, clippy)
        run: rustup component add rustfmt clippy

      - name: Run cargo fmt
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --all -- --check

      - name: Run clippy
        uses: actions-rs/clippy-check@v1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          args: --all-features

  test:
    name: Test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: true
      - name: Install stable
        uses: dtolnay/rust-toolchain@stable
        with:
          components: llvm-tools-preview

      - name: cargo install cargo-llvm-cov
        uses: taiki-e/install-action@cargo-llvm-cov

      - name: cargo generate-lockfile
        if: hashFiles('Cargo.lock') == ''
        run: cargo generate-lockfile

      - name: cargo llvm-cov
        run: cargo llvm-cov --locked --no-fail-fast --all-features --features _tests_order_servers --lcov --output-path lcov.info
        env:
          HROBOT_USERNAME: ${{ secrets.HROBOT_USERNAME }}
          HROBOT_PASSWORD: ${{ secrets.HROBOT_PASSWORD }}

      - name: Record Rust version
        run: echo "RUST=$(rustc --version)" >> "$GITHUB_ENV"

      - name: Upload to codecov.io
        uses: codecov/codecov-action@v4
        with:
          fail_ci_if_error: true
          token: ${{ secrets.CODECOV_TOKEN }}
          env_vars: OS,RUST

  tag:
    name: Tag & Publish
    needs: [lint, test]
    if: github.event_name == 'push' && github.ref == 'refs/heads/master'
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Fetch the version from Cargo.toml
        id: retrieve_tag
        run: echo ::set-output name=crate-tag::$(cat Cargo.toml | grep version | head -n1 | awk '{ print $3 }' | tr -d '"')
        shell: bash

      - name: Publish crate to crates.io
        uses: katyo/publish-crates@v2
        with:
          registry-token: ${{ secrets.CARGO_LOGIN_TOKEN }}
          ignore-unpublished-changes: true

      - name: Push the crate version as a tag
        id: tag_version
        uses: mathieudutour/github-tag-action@v5.4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          tag_prefix: ""
          custom_tag: ${{ steps.retrieve_tag.outputs.crate-tag }}