flatten-rust 0.3.1

High-performance codebase flattening tool in Rust
Documentation
name: Release

on:
  push:
    tags:
      - 'v*'

env:
  CARGO_TERM_COLOR: always

jobs:
  build-and-release:
    name: Build and Release
    runs-on: ${{ matrix.os }}
    permissions:
      contents: write
    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            target: x86_64-unknown-linux-gnu
            asset_name: flatten-rust-linux-x86_64
          - os: windows-latest
            target: x86_64-pc-windows-msvc
            asset_name: flatten-rust-windows-x86_64.exe
          - os: macos-latest
            target: x86_64-apple-darwin
            asset_name: flatten-rust-macos-x86_64
          - os: macos-latest
            target: aarch64-apple-darwin
            asset_name: flatten-rust-macos-aarch64

    steps:
    - name: Checkout code
      uses: actions/checkout@v5

    - name: Install Rust
      uses: dtolnay/rust-toolchain@stable
      with:
        targets: ${{ matrix.target }}

    - name: Cache dependencies
      uses: actions/cache@v4
      with:
        path: |
          ~/.cargo/registry
          ~/.cargo/git
          target
        key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}

    

    - name: Build binary
      run: cargo build --release --target ${{ matrix.target }}

    - name: Strip binary (Unix)
      if: runner.os != 'Windows'
      run: strip target/${{ matrix.target }}/release/flatten-rust${{ matrix.os == 'windows-latest' && '.exe' || '' }}

    - name: Upload Release Asset
      uses: softprops/action-gh-release@v2
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        tag_name: ${{ github.ref_name }}
        files: target/${{ matrix.target }}/release/flatten-rust${{ matrix.os == 'windows-latest' && '.exe' || '' }}

  publish-cargo:
    name: Publish to crates.io
    runs-on: ubuntu-latest
    needs: build-and-release
    steps:
    - name: Checkout code
      uses: actions/checkout@v5

    - name: Install Rust
      uses: dtolnay/rust-toolchain@stable

    - name: Publish to crates.io
      run: cargo publish --token ${{ secrets.CRATES_IO_TOKEN }}