digital_blasphemy_client 0.1.7

A client for the Digital Blasphemy API
Documentation
name: 'Run main workflow'

on:
  pull_request:
  push:
    branches:
      - "main"
    tags:
      - "*"

permissions:
  contents: write
  pull-requests: read

concurrency:
  group: '${{ github.workflow }} @ ${{ github.event.pull_request.head.label || github.head_ref || github.ref }}'
  cancel-in-progress: true

jobs:
  check-formatting:
    runs-on: "ubuntu-latest"
    timeout-minutes: 30
    if: github.ref_type != 'tags'
    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - name: Setup rust
        uses: actions-rust-lang/setup-rust-toolchain@v1
      - name: Run formatting check
        run: cargo fmt --all -- --check
  lint:
    runs-on: "ubuntu-latest"
    timeout-minutes: 30
    if: github.ref_type != 'tags'
    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - name: Setup rust
        uses: actions-rust-lang/setup-rust-toolchain@v1
      - name: Run lint
        run: cargo clippy --all-features --all-targets
  test-build:
    strategy:
      matrix:
        os:
          - ubuntu-latest
          - macos-latest
          - windows-latest
    runs-on: ${{ matrix.os }}
    timeout-minutes: 30
    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - name: Setup rust
        uses: actions-rust-lang/setup-rust-toolchain@v1
      - name: Run release build
        if: github.ref_type == 'tags'
        run: cargo build --release
      - name: Run build
        if: github.ref_type != 'tags'
        run: cargo build
      - name: Install tarpaulin
        if: github.ref_type != 'tags'
        run: cargo install cargo-tarpaulin
      - name: Run tests with coverage
        if: github.ref_type != 'tags'
        run: cargo tarpaulin --fail-under 91
  release-dry-run:
    runs-on: "ubuntu-latest"
    timeout-minutes: 30
    needs:
      - test-build
    if: ${{ github.ref_type != 'tag' }}
    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - name: Setup rust
        uses: actions-rust-lang/setup-rust-toolchain@v1
      - name: Publish to crates.io
        uses: katyo/publish-crates@v2
        with:
          dry-run: true
          registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}
  release:
    runs-on: "ubuntu-latest"
    timeout-minutes: 30
    needs:
      - test-build
    if: ${{ github.ref_type == 'tag' }}
    steps:
      - uses: actions/create-github-app-token@v3
        id: app-token
        with:
          client-id: ${{ vars.APP_CLIENT_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}
          permission-contents: write
      - name: Checkout
        uses: actions/checkout@v6
        with:
          token: ${{ steps.app-token.outputs.token }}
      - run: |
          git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]'
          git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com'
          gh auth setup-git
        env:
          GH_TOKEN: ${{ steps.app-token.outputs.token }}
      - name: Setup rust
        uses: actions-rust-lang/setup-rust-toolchain@v1
      - name: Set version for release
        run: |
          cargo install cargo-edit --no-default-features --features "set-version"
          cargo set-version ${{ github.ref_name }}
      - name: Commit release version
        run: |
          git add Cargo.toml Cargo.lock
          git commit -m "chore: set version to ${{ github.ref_name }}"
      - name: Publish to crates.io
        uses: katyo/publish-crates@v2
        with:
          registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}
      - name: Set version for next release
        id: next-release-version
        run: |
          NEXT_VERSION=$(echo ${{ github.ref_name }} | awk -F. -v OFS=. '{$NF += 1 ; print}')-alpha
          cargo set-version "$NEXT_VERSION"
          echo "next-version=${NEXT_VERSION}" >> $GITHUB_OUTPUT
      - name: Commit next release version
        run: |
          git add Cargo.toml Cargo.lock
          git commit -m "chore: set version to ${{ steps.next-release-version.outputs.next-version }}"
          git push origin HEAD:main
      - name: Create Release
        uses: ncipollo/release-action@v1.21.0
        with:
          generateReleaseNotes: true
          makeLatest: true