leenfetch 0.2.5

Fast, minimal, customizable system info tool in Rust (Neofetch alternative)
name: Build and Release

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

permissions:
  contents: write

jobs:
  build-and-release:
    runs-on: ubuntu-latest

    env:
      CARGO_TERM_COLOR: always
      CARGO_INCREMENTAL: 0

    steps:
      - uses: actions/checkout@v4

      - name: Extract tag name
        run: echo "VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV

      - name: Debug Environment
        run: |
          echo "GITHUB_REF=$GITHUB_REF"
          echo "VERSION=$VERSION"

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: |
            x86_64-pc-windows-gnu
            aarch64-unknown-linux-gnu

      - name: Install system dependencies
        run: sudo apt-get update && sudo apt-get install -y libx11-dev libxrandr-dev zip rpm gcc-aarch64-linux-gnu

      - name: Install packaging tools
        run: |
          cargo install cargo-deb
          cargo install cargo-rpm
          cargo install cross

      - name: Build for Linux [x86_64]
        run: |
          cargo build --release --target-dir target/linux
          mkdir -p dist
          cp target/linux/release/leenfetch dist/leenfetch
          tar -czvf dist/leenfetch-${{ env.VERSION }}-linux-x86_64.tar.gz -C dist leenfetch
          rm dist/leenfetch

      - name: Build for Linux [aarch64]
        run: |
          cross build --release --target aarch64-unknown-linux-gnu --target-dir target/aarch64
          cp target/aarch64/aarch64-unknown-linux-gnu/release/leenfetch dist/leenfetch
          cd dist && tar -czvf leenfetch-${{ env.VERSION }}-linux-aarch64.tar.gz leenfetch && rm leenfetch && cd ..

      - name: Build .deb package [x86_64]
        run: |
          cargo deb
          mv target/debian/*.deb dist/leenfetch-${{ env.VERSION }}-debian-x86_64.deb

      - name: Build .deb package [aarch64]
        run: |
          cross build --release --target aarch64-unknown-linux-gnu
          cargo deb --no-build --no-strip --target aarch64-unknown-linux-gnu
          cp target/aarch64-unknown-linux-gnu/debian/*.deb dist/leenfetch-${{ env.VERSION }}-debian-aarch64.deb

      - name: Build .rpm package [x86_64]
        run: |
          cargo rpm init && cargo rpm build
          cp target/release/rpmbuild/RPMS/x86_64/*.rpm dist/leenfetch-${{ env.VERSION }}-REHL-x86_64.rpm

      # - name: Build .rpm package [aarch64]
      #   run: |
      #     cross build --release --target aarch64-unknown-linux-gnu
      #     cargo rpm build --target aarch64-unknown-linux-gnu --no-build
      #     cp target/aarch64-unknown-linux-gnu/release/rpmbuild/RPMS/aarch64/*.rpm dist/leenfetch-${{ env.VERSION }}-rhel-aarch64.rpm

      - name: Build for Windows [x86_64]
        run: |
          cross build --release --target x86_64-pc-windows-gnu --target-dir target/windows
          cp target/windows/x86_64-pc-windows-gnu/release/leenfetch.exe dist/leenfetch-${{ env.VERSION }}-windows-x86_64.exe
          cd dist && zip leenfetch-${{ env.VERSION }}-windows-x86_64.zip leenfetch-${{ env.VERSION }}-windows-x86_64.exe && cd ..

      - name: Generate checksums
        run: |
          cd dist
          sha256sum * > SHA256SUMS.txt
          cd ..

      - name: Generate Release Notes
        run: |
          echo "# 🐧 LeenFetch ${VERSION}" > dist/RELEASE-NOTES.md
          echo "" >> dist/RELEASE-NOTES.md
          echo "## 📦 Available Downloads" >> dist/RELEASE-NOTES.md
          echo "" >> dist/RELEASE-NOTES.md
          echo "| File | Platform | Format | Install Instructions |" >> dist/RELEASE-NOTES.md
          echo "|------|----------|--------|----------------------|" >> dist/RELEASE-NOTES.md

          echo "| [leenfetch-${VERSION}-linux-x86_64.tar.gz](https://github.com/drunkleen/leenfetch/releases/download/${VERSION}/leenfetch-${VERSION}-linux-x86_64.tar.gz) | Linux (x86_64) | tar.gz | \`tar -xzvf\` and run \`./leenfetch\` |" >> dist/RELEASE-NOTES.md
          echo "| [leenfetch-${VERSION}-linux-aarch64.tar.gz](https://github.com/drunkleen/leenfetch/releases/download/${VERSION}/leenfetch-${VERSION}-linux-aarch64.tar.gz) | Linux (ARM64) | tar.gz | \`tar -xzvf\` and run \`./leenfetch\` |" >> dist/RELEASE-NOTES.md

          echo "| [leenfetch-${VERSION}-debian-x86_64.deb](https://github.com/drunkleen/leenfetch/releases/download/${VERSION}/leenfetch-${VERSION}-debian-x86_64.deb) | Debian/Ubuntu (x86_64) | .deb | \`sudo dpkg -i\` |" >> dist/RELEASE-NOTES.md
          echo "| [leenfetch-${VERSION}-debian-aarch64.deb](https://github.com/drunkleen/leenfetch/releases/download/${VERSION}/leenfetch-${VERSION}-debian-aarch64.deb) | Debian/Ubuntu (ARM64) | .deb | \`sudo dpkg -i\` |" >> dist/RELEASE-NOTES.md

          echo "| [leenfetch-${VERSION}-REHL-x86_64.rpm](https://github.com/drunkleen/leenfetch/releases/download/${VERSION}/leenfetch-${VERSION}-REHL-x86_64.rpm) | RHEL/CentOS/Fedora (x86_64) | .rpm | \`sudo rpm -i\` |" >> dist/RELEASE-NOTES.md

          echo "| [leenfetch-${VERSION}-windows-x86_64.zip](https://github.com/drunkleen/leenfetch/releases/download/${VERSION}/leenfetch-${VERSION}-windows-x86_64.zip) | Windows (x86_64) | .zip | Extract and run \`leenfetch-${VERSION}-windows-x86_64.exe\` |" >> dist/RELEASE-NOTES.md
          echo "| [leenfetch-${VERSION}-windows-x86_64.exe](https://github.com/drunkleen/leenfetch/releases/download/${VERSION}/leenfetch-${VERSION}-windows-x86_64.exe) | Windows (x86_64) | .exe | run \`leenfetch-${VERSION}-windows-x86_64.exe\` |" >> dist/RELEASE-NOTES.md

          echo "" >> dist/RELEASE-NOTES.md
          echo "## 🔐 Checksums" >> dist/RELEASE-NOTES.md
          echo '```' >> dist/RELEASE-NOTES.md
          cat dist/SHA256SUMS.txt >> dist/RELEASE-NOTES.md
          echo '```' >> dist/RELEASE-NOTES.md

      - name: Generate CHANGELOG.md
        run: |
          echo "## Changes in ${{ env.VERSION }}" > dist/CHANGELOG.md
          echo "" >> dist/CHANGELOG.md
          git log --pretty=format:"- %s (%h)" $(git describe --tags --abbrev=0)..HEAD >> dist/CHANGELOG.md

      - name: Upload Release Assets
        uses: softprops/action-gh-release@v2
        with:
          files: dist/*
          generate_release_notes: true
          body_path: dist/RELEASE-NOTES.md
        env:
          GITHUB_TOKEN: ${{ secrets.GH_PAT }}