Skip to content

Publish to AUR

Publish to AUR #6

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
awk -v sha_license="${{ steps.sha256.outputs.sha256_license }}" \
-v sha_readme="${{ steps.sha256.outputs.sha256_readme }}" \
-v sha_binary="${{ steps.sha256.outputs.sha256_binary }}" '
BEGIN {
in_sha=0; in_shax=0;
in_source=0; in_sourcex=0;
printed_sha=0; printed_shax=0;
}
function print_sha() {
if (!printed_sha) {
print "sha256sums=(" "\047" sha_license "\047" " " "\047" sha_readme "\047" ")";
printed_sha=1;
}
}
function print_shax() {
if (!printed_shax) {
print "sha256sums_x86_64=(" "\047" sha_binary "\047" ")";
printed_shax=1;
}
}
/^sha256sums=/ { in_sha=1; next }
/^sha256sums_x86_64=/ { in_shax=1; next }
in_sha {
if ($0 ~ /\)/) in_sha=0;
next
}
in_shax {
if ($0 ~ /\)/) in_shax=0;
next
}
/^source=/ {
print;
if ($0 ~ /\)/) {
print_sha();
} else {
in_source=1;
}
next
}
/^source_x86_64=/ {
print;
if ($0 ~ /\)/) {
print_shax();
} else {
in_sourcex=1;
}
next
}
in_source {
print;
if ($0 ~ /^\s*\)\s*$/) {
in_source=0;
print_sha();
}
next
}
in_sourcex {
print;
if ($0 ~ /^\s*\)\s*$/) {
in_sourcex=0;
print_shax();
}
next
}
{ print }
END {
if (!printed_sha) print_sha();
if (!printed_shax) print_shax();
}
' PKGBUILD > PKGBUILD.tmp && mv PKGBUILD.tmp PKGBUILD
# 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