ciclostile 0.0.1

Fill .docx templates: replace text, insert images and tables, and keep everything else untouched
Documentation
name: CI

on:
  push:
  pull_request:

permissions:
  contents: read

env:
  RUST_VERSION: 1.99.1

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  fmt:
    name: rustfmt / 1.99.1
    runs-on: ubuntu-26.04
    timeout-minutes: 5
    steps:
      - name: Checkout
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false

      - name: Rust toolchain
        uses: dtolnay/rust-toolchain@d1031067263f94b142dd6c0ce24c5eb9d02d52a0 # master
        with:
          toolchain: ${{ env.RUST_VERSION }}
          components: rustfmt

      - name: cargo fmt
        run: cargo fmt -- --check

  clippy:
    name: clippy / 1.99.1
    runs-on: ubuntu-26.04
    timeout-minutes: 15
    steps:
      - name: Checkout
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false

      - name: Rust toolchain
        uses: dtolnay/rust-toolchain@d1031067263f94b142dd6c0ce24c5eb9d02d52a0 # master
        with:
          toolchain: ${{ env.RUST_VERSION }}
          components: clippy

      - name: cargo clippy
        run: cargo clippy --locked --all-features -- -D warnings

  test:
    name: test / ${{ matrix.name }}
    runs-on: ubuntu-26.04
    timeout-minutes: 25
    strategy:
      matrix:
        include:
          - name: stable
            rust: stable
          - name: beta
            rust: beta
          - name: nightly
            rust: nightly
          - name: 1.88.0
            rust: 1.88.0
    steps:
      - name: Checkout
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false

      - name: Rust toolchain
        uses: dtolnay/rust-toolchain@d1031067263f94b142dd6c0ce24c5eb9d02d52a0 # master
        with:
          toolchain: ${{ matrix.rust }}

      - name: Cache
        uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: rust-${{ matrix.rust }}-${{ runner.arch }}-${{ hashFiles('Cargo.lock') }}
          restore-keys: |
            rust-${{ matrix.rust }}-${{ runner.arch }}-

      - name: cargo test
        run: cargo test --locked


  deny:
    name: cargo-deny
    runs-on: ubuntu-26.04
    timeout-minutes: 15
    steps:
      - name: Checkout
        uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
        with:
          persist-credentials: false

      - name: cargo deny
        uses: EmbarkStudios/cargo-deny-action@c3bbe7e4e3f7baeee1a3dd9aec0a3b2aded580fb # v2.1.1
        with:
          arguments: --all-features