Publish to AUR #6
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 | |
| 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 |