soundcloud-tui 0.3.13

A minimalist terminal SoundCloud & YouTube player for Linux in Rust, crafted with @ttype aesthetic.
name: Release

on:
  push:
    tags:
      - 'v*'

permissions:
  contents: write

jobs:
  release:
    name: Build & Publish Release Assets
    runs-on: ubuntu-latest
    container:
      image: archlinux:base-devel
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Install Rust & packaging dependencies
        run: |
          pacman -Syu --noconfirm rust cargo git zstd tar binutils fakeroot pacman-contrib

      - name: Build release binary & run tests
        run: |
          cargo test --release
          cargo build --release --locked

      - name: Package tarball & Arch Linux Pacman repository
        run: |
          VERSION="${GITHUB_REF_NAME#v}"
          mkdir -p dist pkgroot/usr/bin pkgroot/usr/share/licenses/sctui

          cp target/release/sctui dist/sctui
          tar -czf "dist/sctui-${VERSION}-x86_64.tar.gz" -C target/release sctui ../..//README.md ../../LICENSE 2>/dev/null || \
            tar -czf "dist/sctui-${VERSION}-x86_64.tar.gz" -C target/release sctui

          # Create non-root builder user for makepkg
          useradd -m builder
          echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
          chown -R builder:builder .

          # Build sctui-bin package
          mkdir -p build-bin
          cp PKGBUILD.bin build-bin/PKGBUILD
          sed -i "s/^pkgver=.*/pkgver=${VERSION}/" build-bin/PKGBUILD
          cp "dist/sctui-${VERSION}-x86_64.tar.gz" build-bin/
          chown -R builder:builder build-bin
          su builder -c "cd build-bin && makepkg -f --skipchecksums --nodeps"

          for pkg in build-bin/*.pkg.tar.zst; do
            cp "$pkg" "dist/sctui-bin-${VERSION}-1-x86_64.pkg.tar.zst"
            cp "$pkg" "dist/sctui-bin-x86_64.pkg.tar.zst"
            cp "$pkg" "dist/sctui-${VERSION}-1-x86_64.pkg.tar.zst"
          done

          # Generate Pacman repository database (sctui.db)
          cd dist
          repo-add sctui.db.tar.gz "sctui-${VERSION}-1-x86_64.pkg.tar.zst" "sctui-bin-${VERSION}-1-x86_64.pkg.tar.zst"
          rm -f sctui.db sctui.files
          cp sctui.db.tar.gz sctui.db
          cp sctui.files.tar.gz sctui.files

      - name: Publish GitHub Release
        uses: softprops/action-gh-release@v2
        with:
          generate_release_notes: true
          files: |
            dist/sctui
            dist/*.tar.gz
            dist/*.pkg.tar.zst
            dist/sctui.db
            dist/sctui.db.tar.gz
            dist/sctui.files
            dist/sctui.files.tar.gz