gerbil/.github/workflows/aur-release.yml
2025-08-22 17:18:51 -07:00

155 lines
5.9 KiB
YAML

name: AUR Release
permissions:
contents: read
actions: read
on:
workflow_dispatch:
inputs:
tag:
description: 'Tag version to release to AUR (e.g., v0.5.1)'
required: true
type: string
workflow_call:
inputs:
tag:
description: 'Tag version to release to AUR'
required: true
type: string
jobs:
aur-release:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
ref: ${{ inputs.tag }}
- name: Get release information
id: release_info
run: |
TAG="${{ inputs.tag }}"
VERSION=${TAG#v}
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "tag=$TAG" >> $GITHUB_OUTPUT
# Get author info from package.json
AUTHOR_NAME=$(node -p "require('./package.json').author.name")
AUTHOR_EMAIL=$(node -p "require('./package.json').author.email")
echo "author_name=$AUTHOR_NAME" >> $GITHUB_OUTPUT
echo "author_email=$AUTHOR_EMAIL" >> $GITHUB_OUTPUT
# Get AppImage download URL from GitHub release
APPIMAGE_URL="https://github.com/lone-cloud/friendly-kobold/releases/download/$TAG/Friendly%20Kobold-$VERSION.AppImage"
echo "appimage_url=$APPIMAGE_URL" >> $GITHUB_OUTPUT
# Download AppImage to calculate SHA256
curl -L -o "friendly-kobold-$VERSION.AppImage" "$APPIMAGE_URL"
SHA256=$(sha256sum "friendly-kobold-$VERSION.AppImage" | cut -d' ' -f1)
echo "sha256=$SHA256" >> $GITHUB_OUTPUT
echo "Release info:"
echo "Version: $VERSION"
echo "Tag: $TAG"
echo "Author: $AUTHOR_NAME <$AUTHOR_EMAIL>"
echo "AppImage URL: $APPIMAGE_URL"
echo "SHA256: $SHA256"
- name: Generate PKGBUILD
run: |
cat > PKGBUILD << 'EOF'
# Maintainer: ${{ steps.release_info.outputs.author_name }} <${{ steps.release_info.outputs.author_email }}>
pkgname=friendly-kobold
pkgver=${{ steps.release_info.outputs.version }}
pkgrel=1
pkgdesc="A modern Electron shell for KoboldCpp"
arch=('x86_64')
url="https://github.com/lone-cloud/friendly-kobold"
license=('AGPL-3.0-or-later')
depends=('gtk3' 'libxss' 'nss' 'alsa-lib')
optdepends=('koboldcpp: AI language model backend')
provides=('friendly-kobold')
conflicts=('friendly-kobold-git')
source=("friendly-kobold-${pkgver}.AppImage::${{ steps.release_info.outputs.appimage_url }}")
sha256sums=('${{ steps.release_info.outputs.sha256 }}')
prepare() {
chmod +x "friendly-kobold-${pkgver}.AppImage"
"./friendly-kobold-${pkgver}.AppImage" --appimage-extract
}
package() {
# Install the application
install -dm755 "${pkgdir}/opt/friendly-kobold"
cp -r squashfs-root/* "${pkgdir}/opt/friendly-kobold/"
# Create executable wrapper
install -dm755 "${pkgdir}/usr/bin"
cat > "${pkgdir}/usr/bin/friendly-kobold" << 'WRAPPER'
#!/bin/bash
exec /opt/friendly-kobold/friendly-kobold "$@"
WRAPPER
chmod +x "${pkgdir}/usr/bin/friendly-kobold"
# Install desktop file
install -dm755 "${pkgdir}/usr/share/applications"
cat > "${pkgdir}/usr/share/applications/friendly-kobold.desktop" << 'DESKTOP'
[Desktop Entry]
Name=Friendly Kobold
Comment=A modern Electron shell for KoboldCpp
Exec=friendly-kobold %U
Terminal=false
Type=Application
Icon=friendly-kobold
Categories=Development;Utility;
StartupWMClass=Friendly Kobold
DESKTOP
# Install icon
install -dm755 "${pkgdir}/usr/share/pixmaps"
if [ -f "${pkgdir}/opt/friendly-kobold/resources/assets/icon.png" ]; then
cp "${pkgdir}/opt/friendly-kobold/resources/assets/icon.png" "${pkgdir}/usr/share/pixmaps/friendly-kobold.png"
fi
}
EOF
- name: Validate PKGBUILD
run: |
# Install tools needed for validation
sudo pacman -Sy --noconfirm namcap
# Check PKGBUILD syntax
makepkg --printsrcinfo > .SRCINFO
namcap PKGBUILD || true
- name: Publish to AUR
uses: KSXGitHub/github-actions-deploy-aur@v2.7.2
with:
pkgname: friendly-kobold
pkgbuild: ./PKGBUILD
commit_username: ${{ steps.release_info.outputs.author_name }}
commit_email: ${{ steps.release_info.outputs.author_email }}
ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
commit_message: 'Update to ${{ steps.release_info.outputs.version }}'
ssh_keyscan_types: rsa,ecdsa,ed25519
- name: Create AUR release summary
run: |
echo "## AUR Release Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "📦 **Package**: friendly-kobold" >> $GITHUB_STEP_SUMMARY
echo "🔖 **Version**: ${{ steps.release_info.outputs.version }}" >> $GITHUB_STEP_SUMMARY
echo "🔗 **AUR Page**: https://aur.archlinux.org/packages/friendly-kobold" >> $GITHUB_STEP_SUMMARY
echo "✅ **Status**: Successfully published to AUR" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Installation" >> $GITHUB_STEP_SUMMARY
echo '```bash' >> $GITHUB_STEP_SUMMARY
echo "# Using yay" >> $GITHUB_STEP_SUMMARY
echo "yay -S friendly-kobold" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "# Using paru" >> $GITHUB_STEP_SUMMARY
echo "paru -S friendly-kobold" >> $GITHUB_STEP_SUMMARY
echo '```' >> $GITHUB_STEP_SUMMARY