diff --git a/.github/workflows/aur.yml b/.github/workflows/aur.yml new file mode 100644 index 0000000..8536aa3 --- /dev/null +++ b/.github/workflows/aur.yml @@ -0,0 +1,54 @@ +name: AUR + +on: + workflow_dispatch: + + pull_request: + types: [opened, edited] + branches: [development, master] + paths: + - 'aur/**' + - '.github/workflows/aur.yml' + + push: + branches: [master] + paths: + - 'aur/**' + - '.github/workflows/aur.yml' + +jobs: + build: + name: Build and Lint AUR Package + runs-on: ubuntu-latest + container: + image: archlinux:latest + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Install dependencies + run: | + pacman -Sy --noconfirm base-devel namcap python python-build \ + python-installer python-wheel python-setuptools \ + python-yaml python-aiohttp python-async-lru python-rich + + - name: Create build user + run: | + useradd -m builder + chown -R builder /github/workspace || chown -R builder $GITHUB_WORKSPACE + + - name: Lint with namcap + run: namcap aur/PKGBUILD + + - name: Build package + run: | + cp -r aur /home/builder/aur + chown -R builder /home/builder/aur + su builder -c 'cd /home/builder/aur && makepkg --noconfirm' + + - name: Verify package installs + run: | + pkg=$(ls /home/builder/aur/*.pkg.tar.zst) + pacman -U --noconfirm "$pkg" + badfish --help diff --git a/.github/workflows/production-release.yml b/.github/workflows/production-release.yml index b4a11e4..ed4b437 100644 --- a/.github/workflows/production-release.yml +++ b/.github/workflows/production-release.yml @@ -140,3 +140,58 @@ jobs: podman tag quay.io/quads/badfish:master quay.io/quads/badfish:latest podman push quay.io/quads/badfish:master podman push quay.io/quads/badfish:latest + + # ------------------------------------------------------------------ + # JOB 4: AUR PUBLISH + # ------------------------------------------------------------------ + aur_publish: + name: Publish to AUR + needs: release + if: needs.release.outputs.released == 'true' + runs-on: ubuntu-latest + + steps: + - name: Checkout Tagged Release + uses: actions/checkout@v4 + with: + ref: ${{ needs.release.outputs.tag }} + + - name: Update PKGBUILD and .SRCINFO + env: + VERSION: ${{ needs.release.outputs.version }} + TAG: ${{ needs.release.outputs.tag }} + run: | + SHA256=$(curl -sL "https://github.com/quadsproject/badfish/archive/refs/tags/${TAG}.tar.gz" | sha256sum | cut -d' ' -f1) + + sed -i "s/^pkgver=.*/pkgver=${VERSION}/" aur/PKGBUILD + sed -i "s/^pkgrel=.*/pkgrel=1/" aur/PKGBUILD + sed -i "s/^sha256sums=.*/sha256sums=('${SHA256}')/" aur/PKGBUILD + + sed -i "s/^\tpkgver = .*/\tpkgver = ${VERSION}/" aur/.SRCINFO + sed -i "s/^\tpkgrel = .*/\tpkgrel = 1/" aur/.SRCINFO + sed -i "s|badfish-.*\.tar\.gz::|badfish-${VERSION}.tar.gz::|" aur/.SRCINFO + sed -i "s|/tags/v[^/]*/|/tags/${TAG}/|" aur/.SRCINFO + sed -i "s/^\tsha256sums = .*/\tsha256sums = ${SHA256}/" aur/.SRCINFO + + - name: Set up SSH for AUR + env: + AUR_SSH_KEY: ${{ secrets.AUR_SSH_KEY }} + run: | + mkdir -p ~/.ssh + echo "$AUR_SSH_KEY" > ~/.ssh/aur + chmod 600 ~/.ssh/aur + printf 'Host aur.archlinux.org\n IdentityFile ~/.ssh/aur\n User aur\n' >> ~/.ssh/config + ssh-keyscan -H aur.archlinux.org >> ~/.ssh/known_hosts + + - name: Push to AUR + env: + VERSION: ${{ needs.release.outputs.version }} + run: | + git config --global user.name "GitHub CI" + git config --global user.email "ci@github.com" + git clone ssh://aur@aur.archlinux.org/badfish.git /tmp/aur-badfish + cp aur/PKGBUILD aur/.SRCINFO /tmp/aur-badfish/ + cd /tmp/aur-badfish + git add PKGBUILD .SRCINFO + git commit -m "Update to ${VERSION}" + git push diff --git a/aur/.SRCINFO b/aur/.SRCINFO new file mode 100644 index 0000000..eec66e1 --- /dev/null +++ b/aur/.SRCINFO @@ -0,0 +1,21 @@ +pkgbase = badfish + pkgdesc = Redfish-based API tool for managing bare-metal systems via out-of-band management + pkgver = 1.5.0 + pkgrel = 1 + url = https://github.com/quadsproject/badfish + arch = any + license = GPL-3.0-or-later + makedepends = python-build + makedepends = python-installer + makedepends = python-wheel + makedepends = python-setuptools + depends = python + depends = python-yaml + depends = python-aiohttp + depends = python-setuptools + depends = python-async-lru + depends = python-rich + source = badfish-1.5.0.tar.gz::https://github.com/quadsproject/badfish/archive/refs/tags/v1.5.0.tar.gz + sha256sums = 70ffb8e5980e8f0177ce6dec1e78550156a425b63d5ee41854df37a0ffb4b47d + +pkgname = badfish diff --git a/aur/PKGBUILD b/aur/PKGBUILD new file mode 100644 index 0000000..e1ac665 --- /dev/null +++ b/aur/PKGBUILD @@ -0,0 +1,35 @@ +# Maintainer: Marek Mahut + +pkgname=badfish +pkgver=1.5.0 +pkgrel=1 +pkgdesc="Redfish-based API tool for managing bare-metal systems via out-of-band management" +arch=('any') +url="https://github.com/quadsproject/badfish" +license=('GPL-3.0-or-later') +depends=( + 'python' + 'python-yaml' + 'python-aiohttp' + 'python-setuptools' + 'python-async-lru' + 'python-rich' +) +makedepends=( + 'python-build' + 'python-installer' + 'python-wheel' + 'python-setuptools' +) +source=("${pkgname}-${pkgver}.tar.gz::https://github.com/quadsproject/badfish/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('70ffb8e5980e8f0177ce6dec1e78550156a425b63d5ee41854df37a0ffb4b47d') + +build() { + cd "${pkgname}-${pkgver}" + python -m build --wheel --no-isolation +} + +package() { + cd "${pkgname}-${pkgver}" + python -m installer --destdir="${pkgdir}" dist/*.whl +}