code-digest 0.5.0

High-performance CLI tool to convert codebases to Markdown for LLM context
Documentation
name: Release

on:
  push:
    tags:
      - 'v*'

env:
  CARGO_TERM_COLOR: always

permissions:
  contents: write
  packages: write

jobs:
  create-release:
    name: Create Release
    runs-on: ubuntu-latest
    outputs:
      upload_url: ${{ steps.set_upload_url.outputs.upload_url }}
    steps:
    - uses: actions/checkout@v4
    
    - name: Check if release exists
      id: check_release
      run: |
        TAG=${GITHUB_REF#refs/tags/}
        if gh release view $TAG > /dev/null 2>&1; then
          echo "Release already exists, skipping creation"
          echo "exists=true" >> $GITHUB_OUTPUT
          UPLOAD_URL=$(gh release view $TAG --json uploadUrl --jq '.uploadUrl')
          echo "upload_url=$UPLOAD_URL" >> $GITHUB_OUTPUT
        else
          echo "exists=false" >> $GITHUB_OUTPUT
        fi
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    
    - name: Create Release
      id: create_release
      if: steps.check_release.outputs.exists == 'false'
      run: |
        TAG=${GITHUB_REF#refs/tags/}
        gh release create $TAG --title "Release $TAG" --generate-notes
        UPLOAD_URL=$(gh release view $TAG --json uploadUrl --jq '.uploadUrl')
        echo "upload_url=$UPLOAD_URL" >> $GITHUB_OUTPUT
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
    
    - name: Set upload URL
      id: set_upload_url
      run: |
        if [ "${{ steps.check_release.outputs.exists }}" == "true" ]; then
          echo "upload_url=${{ steps.check_release.outputs.upload_url }}" >> $GITHUB_OUTPUT
        else
          echo "upload_url=${{ steps.create_release.outputs.upload_url }}" >> $GITHUB_OUTPUT
        fi

  build-and-upload:
    name: Build and upload
    needs: create-release
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            target: x86_64-unknown-linux-gnu
            artifact_name: code-digest
            asset_name: code-digest-linux-amd64
          - os: windows-latest
            target: x86_64-pc-windows-msvc
            artifact_name: code-digest.exe
            asset_name: code-digest-windows-amd64.exe
          - os: macos-latest
            target: x86_64-apple-darwin
            artifact_name: code-digest
            asset_name: code-digest-macos-x86_64
          - os: macos-latest
            target: aarch64-apple-darwin
            artifact_name: code-digest
            asset_name: code-digest-macos-aarch64
            
    steps:
    - uses: actions/checkout@v4
    
    - name: Install Rust toolchain
      uses: dtolnay/rust-toolchain@stable
      with:
        targets: ${{ matrix.target }}
    
    - name: Build release binary
      run: cargo build --release --target ${{ matrix.target }} --all-features
    
    - name: Upload Release Asset
      run: |
        TAG=${GITHUB_REF#refs/tags/}
        gh release upload $TAG ./target/${{ matrix.target }}/release/${{ matrix.artifact_name }}#${{ matrix.asset_name }}
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}