mdtablefix 0.5.0

`mdtablefix` unb0rks and reflows Markdown tables so that each column has a uniform width. When the `--wrap` option is used, it also wraps paragraphs and list items to 80 columns.
Documentation
name: Release Binary

on:
  push:
    tags:
      - 'v*.*.*'

env:
  REPO_NAME: ${{ github.event.repository.name }}

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        include:
          - os: linux
            arch: x86_64
            target: x86_64-unknown-linux-gnu
            ext: ""
            cargo_binstall_archive: true
          - os: linux
            arch: aarch64
            target: aarch64-unknown-linux-gnu
            ext: ""
            cargo_binstall_archive: true
#          - os: windows
#            arch: x86_64
#            target: x86_64-pc-windows-msvc
#            ext: ".exe"
#          - os: windows
#            arch: aarch64
#            target: aarch64-pc-windows-msvc
#            ext: ".exe"
#          - os: macos
#            arch: x86_64
#            target: x86_64-apple-darwin
#            ext: ""
#          - os: macos
#            arch: aarch64
#            target: aarch64-apple-darwin
#            ext: ""
          - os: freebsd
            arch: x86_64
            target: x86_64-unknown-freebsd
            ext: ""
            cargo_binstall_archive: false
#          - os: freebsd
#            arch: aarch64
#            target: aarch64-unknown-freebsd
#            ext: ""
#          - os: openbsd
#            arch: x86_64
#            target: x86_64-unknown-openbsd
#            ext: ""
#          - os: openbsd
#            arch: aarch64
#            target: aarch64-unknown-openbsd
#            ext: ""
    steps:
      - uses: actions/checkout@v6
      - name: Setup Python 3.11
        id: setup-python
        uses: actions/setup-python@v6
        with:
          python-version: '3.11'
      - name: Verify tag matches Cargo.toml
        run: |
          set -euo pipefail
          tag="${GITHUB_REF_NAME#v}"
          export CARGO_TOML_PATH="${CARGO_TOML_PATH:-Cargo.toml}"
          python_script="import os, pathlib, tomllib; print(tomllib.loads(pathlib.Path(os.environ['CARGO_TOML_PATH']).read_text(encoding='utf-8'))['package']['version'])"
          cargo_version="$(echo "${python_script}" | "${{ steps.setup-python.outputs.python-path }}")"
          if [ -z "${cargo_version:-}" ]; then
            echo "::error title=Cargo.toml parse failure::Could not read package.version from ${toml_path}. Ensure Python ≥3.11 (tomllib available) and that the manifest contains [package], or set CARGO_TOML_PATH to the crate's Cargo.toml."
            exit 1
          fi
          if [ "$tag" != "$cargo_version" ]; then
            echo "::error title=Tag/Cargo.toml mismatch::Tag version $tag does not match Cargo.toml version $cargo_version"
            exit 1
          fi
          echo "Release tag $tag matches Cargo.toml version."
      - name: Setup Rust
        uses: leynos/shared-actions/.github/actions/setup-rust@eff100c965da05e14fd4e07d7ea518408b312cb8
      - name: Cache cross binary
        uses: actions/cache@v5
        with:
          path: ~/.cargo/bin/cross
          key: cross-v0.2.5-${{ runner.os }}
      - name: Install cross
        env:
          RUSTFLAGS: ""
        run: cargo install cross --git https://github.com/cross-rs/cross --tag v0.2.5
      - name: Cache cargo registry
        uses: actions/cache@v5
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-cargo-
      - name: Add release target
        run: rustup target add ${{ matrix.target }}
      - name: Build release binary
        run: cross +stable build --release --target ${{ matrix.target }}
      - name: Prepare artifact
        run: |
          set -euo pipefail
          version="${GITHUB_REF_NAME#v}"
          artifact_dir="artifacts/${{ matrix.os }}-${{ matrix.arch }}"
          binary_path="target/${{ matrix.target }}/release/${{ env.REPO_NAME }}${{ matrix.ext }}"
          binary_name="${{ env.REPO_NAME }}-${{ matrix.os }}-${{ matrix.arch }}${{ matrix.ext }}"

          mkdir -p "${artifact_dir}"
          cp "${binary_path}" "${artifact_dir}/${binary_name}"
          sha256sum "${artifact_dir}/${binary_name}" > \
            "${artifact_dir}/${binary_name}.sha256"

          if [ "${{ matrix.cargo_binstall_archive }}" = "true" ]; then
            archive_name="${{ env.REPO_NAME }}-${version}-${{ matrix.target }}.tar.gz"
            tar -C "target/${{ matrix.target }}/release" -czf \
              "${artifact_dir}/${archive_name}" "${{ env.REPO_NAME }}${{ matrix.ext }}"
            sha256sum "${artifact_dir}/${archive_name}" > \
              "${artifact_dir}/${archive_name}.sha256"
          fi
      - name: Upload release artifact
        uses: actions/upload-artifact@v7
        with:
          name: ${{ env.REPO_NAME }}-${{ matrix.os }}-${{ matrix.arch }}
          path: artifacts/${{ matrix.os }}-${{ matrix.arch }}

  release:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: softprops/action-gh-release@v2
        with:
          generate_release_notes: true
      - uses: actions/download-artifact@v6
        with:
          path: artifacts
      - run: |
          for dir in artifacts/${{ env.REPO_NAME }}-*; do
            for file in "$dir"/*; do
              gh release upload "${{ github.ref_name }}" "$file"
            done
          done
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}