Repository navigation
ui: update update and error messages to use correct themes #57
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Continuous Deployment | |
| on: | |
| push: | |
| tags: | |
| - "v*.*.*" | |
| env: | |
| CARGO_TERM_COLOR: always | |
| BINARY_NAME: spotatui | |
| jobs: | |
| build: | |
| name: Build ${{ matrix.target }} | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| artifact_prefix: linux-x86_64 # most Linux distros | |
| binary_postfix: "" | |
| audio_features: "audio-viz" | |
| - os: macos-15-intel # Intel runner for x86_64 (available until Aug 2027) | |
| target: x86_64-apple-darwin | |
| artifact_prefix: macos-x86_64 | |
| binary_postfix: "" | |
| audio_features: "audio-viz-cpal,portaudio-backend" | |
| - os: macos-latest # Apple Silicon runner for aarch64 | |
| target: aarch64-apple-darwin | |
| artifact_prefix: macos-aarch64 | |
| binary_postfix: "" | |
| audio_features: "audio-viz-cpal,portaudio-backend" | |
| - os: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| artifact_prefix: windows-x86_64 | |
| binary_postfix: ".exe" | |
| audio_features: "audio-viz-cpal" | |
| steps: | |
| - name: Checkout sources | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.target }} | |
| - name: Install Linux dependencies | |
| if: runner.os == 'Linux' | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y -qq pkg-config libssl-dev libxcb1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libpipewire-0.3-dev libspa-0.2-dev libasound2-dev | |
| - name: Install macOS dependencies | |
| if: runner.os == 'macOS' | |
| run: brew install openssl@3 portaudio | |
| - name: Build release binary | |
| run: | | |
| if [ -z "${{ matrix.audio_features }}" ]; then | |
| cargo build --release --target ${{ matrix.target }} --no-default-features --features telemetry,streaming | |
| else | |
| cargo build --release --target ${{ matrix.target }} --no-default-features --features telemetry,streaming,${{ matrix.audio_features }} | |
| fi | |
| shell: bash | |
| - name: Package binary (Unix) | |
| if: runner.os != 'Windows' | |
| shell: bash | |
| run: | | |
| cd target/${{ matrix.target }}/release | |
| BINARY=${{ env.BINARY_NAME }}${{ matrix.binary_postfix }} | |
| strip $BINARY || true | |
| RELEASE_NAME=${{ env.BINARY_NAME }}-${{ matrix.artifact_prefix }} | |
| tar czvf ../../../$RELEASE_NAME.tar.gz $BINARY | |
| cd ../../.. | |
| shasum -a 256 $RELEASE_NAME.tar.gz > $RELEASE_NAME.tar.gz.sha256 | |
| - name: Package binary (Windows) | |
| if: runner.os == 'Windows' | |
| shell: bash | |
| run: | | |
| cd target/${{ matrix.target }}/release | |
| BINARY=${{ env.BINARY_NAME }}${{ matrix.binary_postfix }} | |
| RELEASE_NAME=${{ env.BINARY_NAME }}-${{ matrix.artifact_prefix }} | |
| 7z a ../../../$RELEASE_NAME.zip $BINARY | |
| cd ../../.. | |
| certutil -hashfile $RELEASE_NAME.zip sha256 | grep -E [A-Fa-f0-9]{64} > $RELEASE_NAME.zip.sha256 | |
| - name: Upload artifact (Unix) | |
| if: runner.os != 'Windows' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.BINARY_NAME }}-${{ matrix.artifact_prefix }} | |
| path: | | |
| ${{ env.BINARY_NAME }}-${{ matrix.artifact_prefix }}.tar.gz | |
| ${{ env.BINARY_NAME }}-${{ matrix.artifact_prefix }}.tar.gz.sha256 | |
| - name: Upload artifact (Windows) | |
| if: runner.os == 'Windows' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.BINARY_NAME }}-${{ matrix.artifact_prefix }} | |
| path: | | |
| ${{ env.BINARY_NAME }}-${{ matrix.artifact_prefix }}.zip | |
| ${{ env.BINARY_NAME }}-${{ matrix.artifact_prefix }}.zip.sha256 | |
| release: | |
| name: Create GitHub Release | |
| needs: build | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout sources | |
| uses: actions/checkout@v4 | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| merge-multiple: true | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: artifacts/* | |
| generate_release_notes: true | |
| body: | | |
| ## Downloads | |
| - On **Windows 10/11 (64-bit)** → `spotatui-windows-x86_64.zip` | |
| - On **Linux (Ubuntu, Arch, Fedora, etc.)** → `spotatui-linux-x86_64.tar.gz` | |
| - On **macOS with Intel CPU** → `spotatui-macos-x86_64.tar.gz` | |
| - On **macOS with Apple Silicon (M1/M2/M3)** → `spotatui-macos-aarch64.tar.gz` | |
| Checksums (`.sha256`) are optional and only needed if you want to verify the download. | |
| To update use "spotatui update --install" or use your package manager of choice. | |
| draft: false | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| publish-cargo: | |
| name: Publish to crates.io | |
| needs: release | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout sources | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install Linux dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y -qq pkg-config libssl-dev libxcb1-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev | |
| - name: Publish to crates.io | |
| run: cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }} --allow-dirty | |
| publish-aur: | |
| name: Publish to AUR | |
| needs: release | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout sources | |
| uses: actions/checkout@v4 | |
| - name: Extract version | |
| id: version | |
| run: | | |
| VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "Version: $VERSION" | |
| - name: Calculate SHA256 | |
| id: sha256 | |
| run: | | |
| TARBALL_URL="https://github.com/${{ github.repository }}/archive/refs/tags/v${{ steps.version.outputs.version }}.tar.gz" | |
| SHA256=$(curl -sL "$TARBALL_URL" | sha256sum | awk '{print $1}') | |
| echo "sha256=$SHA256" >> $GITHUB_OUTPUT | |
| echo "SHA256: $SHA256" | |
| - name: Setup SSH for AUR | |
| run: | | |
| mkdir -p ~/.ssh | |
| echo "${{ secrets.AUR_SSH_PRIVATE_KEY }}" > ~/.ssh/aur | |
| chmod 600 ~/.ssh/aur | |
| ssh-keyscan aur.archlinux.org >> ~/.ssh/known_hosts | |
| git config --global user.name "${{ secrets.AUR_USERNAME }}" | |
| git config --global user.email "${{ secrets.AUR_EMAIL }}" | |
| - name: Clone AUR repository | |
| run: | | |
| GIT_SSH_COMMAND='ssh -i ~/.ssh/aur -o IdentitiesOnly=yes' git clone ssh://aur@aur.archlinux.org/spotatui.git aur | |
| - name: Update PKGBUILD | |
| working-directory: aur | |
| run: | | |
| sed -i "s/^pkgver=.*/pkgver=${{ steps.version.outputs.version }}/" PKGBUILD | |
| sed -i "s/^pkgrel=.*/pkgrel=1/" PKGBUILD | |
| sed -i "s/^sha256sums=.*/sha256sums=('${{ steps.sha256.outputs.sha256 }}')/" PKGBUILD | |
| # Ensure AUR builds work with default system linker (avoids LLVM bitcode/LTO linker errors). | |
| if ! grep -q "CARGO_PROFILE_RELEASE_LTO=false" PKGBUILD; then | |
| sed -i "/^[[:space:]]*build() {[[:space:]]*$/a\\ export CARGO_PROFILE_RELEASE_LTO=false" PKGBUILD | |
| fi | |
| - name: Generate .SRCINFO | |
| working-directory: aur | |
| run: | | |
| docker run --rm -v $PWD:/pkg archlinux:latest /bin/bash -c " | |
| pacman -Syu --noconfirm --needed base-devel && | |
| useradd -m builder && | |
| chown -R builder:builder /pkg && | |
| cd /pkg && | |
| su builder -c 'makepkg --printsrcinfo' > .SRCINFO | |
| " | |
| sudo chown -R $(id -u):$(id -g) . | |
| - name: Commit and push to AUR | |
| working-directory: aur | |
| run: | | |
| git add PKGBUILD .SRCINFO | |
| git commit -m "Update to ${{ steps.version.outputs.version }}" | |
| GIT_SSH_COMMAND='ssh -i ~/.ssh/aur -o IdentitiesOnly=yes' git push |