From e14936604a75fccf5dc71ce53ce928f5c786081e Mon Sep 17 00:00:00 2001 From: Rian Stockbower <7378790+rianjs@users.noreply.github.com> Date: Sun, 4 Oct 2026 17:40:44 -0400 Subject: [PATCH] feat: publish native Arch Linux packages --- .github/workflows/arch-package.yml | 89 ++++++++++++++++++++++++++++++ .github/workflows/auto-release.yml | 1 + .goreleaser.yml | 3 + README.md | 4 ++ 4 files changed, 97 insertions(+) create mode 100644 .github/workflows/arch-package.yml diff --git a/.github/workflows/arch-package.yml b/.github/workflows/arch-package.yml new file mode 100644 index 0000000..6caa47e --- /dev/null +++ b/.github/workflows/arch-package.yml @@ -0,0 +1,89 @@ +name: Arch package + +on: + pull_request: + paths: + - .goreleaser.yml + - .github/workflows/arch-package.yml + workflow_dispatch: + +permissions: + contents: read + +jobs: + package: + runs-on: macos-15 + timeout-minutes: 20 + strategy: + fail-fast: false + matrix: + include: + - package: spotify-cli + binary: sptfy + config: .goreleaser.yml + go-mod: go.mod + steps: + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5.1.0 + with: + fetch-depth: 0 + - uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0 + with: + go-version-file: ${{ matrix.go-mod }} + - uses: goreleaser/goreleaser-action@f06c13b6b1a9625abc9e6e439d9c05a8f2190e94 # v7.2.3 + with: + version: v2.18.2 + args: release --snapshot --clean --skip=before --config ${{ matrix.config }} + - name: Verify both Arch architectures were rendered + shell: bash + run: | + set -euo pipefail + for arch in amd64 arm64; do + packages=(dist/*"${arch}.pkg.tar.zst") + test "${#packages[@]}" -eq 1 + test -f "${packages[0]}" + done + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: arch-${{ matrix.package }} + path: dist/*.pkg.tar.zst + if-no-files-found: error + + install: + needs: package + runs-on: ubuntu-latest + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + include: + - package: spotify-cli + binary: sptfy + config: .goreleaser.yml + go-mod: go.mod + steps: + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1 + with: + name: arch-${{ matrix.package }} + path: packages + - name: Install, verify and remove in Arch Linux + env: + PACKAGE: ${{ matrix.package }} + BINARY: ${{ matrix.binary }} + shell: bash + run: | + set -euo pipefail + docker run --rm -e PACKAGE -e BINARY -v "$PWD/packages:/packages:ro" archlinux:base bash -c ' + set -euo pipefail + package=(/packages/*amd64.pkg.tar.zst) + test "${#package[@]}" -eq 1 + pacman -U --noconfirm "${package[0]}" + "$BINARY" --version + "$BINARY" --help > /tmp/cli-help + test -s /tmp/cli-help + pacman -Qo "/usr/bin/$BINARY" + pacman -Qkk "$PACKAGE" + pacman -R --noconfirm "$PACKAGE" + test ! -e "/usr/bin/$BINARY" + pacman -U --noconfirm "${package[0]}" + "$BINARY" --version + ' diff --git a/.github/workflows/auto-release.yml b/.github/workflows/auto-release.yml index 31d1e61..b5e2a97 100644 --- a/.github/workflows/auto-release.yml +++ b/.github/workflows/auto-release.yml @@ -18,6 +18,7 @@ jobs: # The CLI family intentionally follows the centrally maintained rolling v1. uses: open-cli-collective/.github/.github/workflows/auto-release.yml@v1 with: + release-paths: "**.go,go.mod,go.sum,version.txt,.goreleaser.yml" dry-run: ${{ github.event_name == 'workflow_dispatch' && (inputs.dry-run == true || inputs.dry-run == 'true') }} secrets: tag-token: ${{ secrets.TAP_GITHUB_TOKEN }} diff --git a/.goreleaser.yml b/.goreleaser.yml index d132b76..ce5f094 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -83,6 +83,9 @@ nfpms: formats: - deb - rpm + - archlinux + # Keep tar entry timestamps aligned with pacman integrity metadata. + mtime: "{{ .CommitDate }}" bindir: /usr/bin contents: - src: LICENSE diff --git a/README.md b/README.md index bdbee77..9bfca5f 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,10 @@ sudo apt install spotify-cli sudo dnf install spotify-cli ``` +### Arch Linux / Omarchy + +Add the signed [Open CLI Collective pacman repository](https://github.com/open-cli-collective/linux-packages#arch-linux-pacman) once. Native Arch packages are published with new releases and updated by `sudo pacman -Syu`. Install with `sudo pacman -Syu spotify-cli`; executable names remain unchanged. + ## Setup Create a Spotify Development Mode application in the Spotify developer