Publish to AUR #4
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: Publish to AUR | |
| permissions: | |
| contents: read | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: "Version to publish (e.g., 0.33.6)" | |
| required: false | |
| type: string | |
| jobs: | |
| publish-aur: | |
| name: Publish to AUR | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout sources | |
| uses: actions/checkout@v6 | |
| - name: Extract version | |
| id: version | |
| run: | | |
| if [ -n "${{ inputs.version }}" ]; then | |
| VERSION="${{ inputs.version }}" | |
| else | |
| VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') | |
| fi | |
| 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 | |
| - 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 | |
| publish-aur-bin: | |
| name: Publish to AUR (spotatui-bin) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout sources | |
| uses: actions/checkout@v6 | |
| - name: Extract version | |
| id: version | |
| run: | | |
| if [ -n "${{ inputs.version }}" ]; then | |
| VERSION="${{ inputs.version }}" | |
| else | |
| VERSION=$(grep '^version = ' Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/') | |
| fi | |
| echo "version=$VERSION" >> $GITHUB_OUTPUT | |
| echo "Version: $VERSION" | |
| - name: Calculate SHA256 checksums | |
| id: sha256 | |
| run: | | |
| VERSION="${{ steps.version.outputs.version }}" | |
| # SHA256 for the binary tarball | |
| BINARY_URL="https://github.com/${{ github.repository }}/releases/download/v${VERSION}/spotatui-linux-x86_64.tar.gz" | |
| SHA256_BINARY=$(curl -sL "$BINARY_URL" | sha256sum | awk '{print $1}') | |
| echo "sha256_binary=$SHA256_BINARY" >> $GITHUB_OUTPUT | |
| echo "Binary SHA256: $SHA256_BINARY" | |
| # SHA256 for LICENSE | |
| LICENSE_URL="https://raw.githubusercontent.com/${{ github.repository }}/v${VERSION}/LICENSE" | |
| SHA256_LICENSE=$(curl -sL "$LICENSE_URL" | sha256sum | awk '{print $1}') | |
| echo "sha256_license=$SHA256_LICENSE" >> $GITHUB_OUTPUT | |
| echo "LICENSE SHA256: $SHA256_LICENSE" | |
| # SHA256 for README.md | |
| README_URL="https://raw.githubusercontent.com/${{ github.repository }}/v${VERSION}/README.md" | |
| SHA256_README=$(curl -sL "$README_URL" | sha256sum | awk '{print $1}') | |
| echo "sha256_readme=$SHA256_README" >> $GITHUB_OUTPUT | |
| echo "README SHA256: $SHA256_README" | |
| - 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-bin.git aur-bin | |
| - name: Update PKGBUILD | |
| working-directory: aur-bin | |
| run: | | |
| # Update version and release | |
| sed -i "s/^pkgver=.*/pkgver=${{ steps.version.outputs.version }}/" PKGBUILD | |
| sed -i "s/^pkgrel=.*/pkgrel=1/" PKGBUILD | |
| # Function to update or add checksum array | |
| update_checksums() { | |
| local array_name="$1" | |
| local checksums="$2" | |
| local insert_after="$3" | |
| # Check if array exists (single-line or multi-line) | |
| if grep -q "^${array_name}=" PKGBUILD; then | |
| # Array exists - remove all lines (handles multi-line arrays) | |
| sed -i "/^${array_name}=/,/)/d" PKGBUILD | |
| fi | |
| # Insert new array after the specified pattern | |
| if [ -n "$insert_after" ]; then | |
| sed -i "/${insert_after}/a ${array_name}=(${checksums})" PKGBUILD | |
| else | |
| # Fallback: append at end of file | |
| echo "${array_name}=(${checksums})" >> PKGBUILD | |
| fi | |
| } | |
| # Update sha256sums (for LICENSE and README) | |
| # Insert after source array declaration | |
| update_checksums \ | |
| "sha256sums" \ | |
| "'${{ steps.sha256.outputs.sha256_license }}' '${{ steps.sha256.outputs.sha256_readme }}'" \ | |
| "^source.*=" | |
| # Update sha256sums_x86_64 (for binary tarball) | |
| # Insert after source_x86_64 array declaration | |
| update_checksums \ | |
| "sha256sums_x86_64" \ | |
| "'${{ steps.sha256.outputs.sha256_binary }}'" \ | |
| "^source_x86_64.*=" | |
| # Validation: Ensure checksums were added | |
| echo "=== Validating PKGBUILD updates ===" | |
| echo "Checking pkgver..." | |
| grep "^pkgver=" PKGBUILD | |
| echo "Checking sha256sums..." | |
| if ! grep -q "^sha256sums=" PKGBUILD; then | |
| echo "ERROR: sha256sums not found in PKGBUILD" | |
| exit 1 | |
| fi | |
| grep "^sha256sums=" PKGBUILD | |
| echo "Checking sha256sums_x86_64..." | |
| if ! grep -q "^sha256sums_x86_64=" PKGBUILD; then | |
| echo "ERROR: sha256sums_x86_64 not found in PKGBUILD" | |
| exit 1 | |
| fi | |
| grep "^sha256sums_x86_64=" PKGBUILD | |
| echo "Verifying checksums match expected values..." | |
| if ! grep -q "${{ steps.sha256.outputs.sha256_license }}" PKGBUILD; then | |
| echo "ERROR: LICENSE checksum not found" | |
| exit 1 | |
| fi | |
| if ! grep -q "${{ steps.sha256.outputs.sha256_readme }}" PKGBUILD; then | |
| echo "ERROR: README checksum not found" | |
| exit 1 | |
| fi | |
| if ! grep -q "${{ steps.sha256.outputs.sha256_binary }}" PKGBUILD; then | |
| echo "ERROR: Binary checksum not found" | |
| exit 1 | |
| fi | |
| echo "=== PKGBUILD validation successful ===" | |
| - name: Generate .SRCINFO | |
| working-directory: aur-bin | |
| 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-bin | |
| 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 |