Skip to content

Publish to AUR

Publish to AUR #4

Workflow file for this run

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