85 lines
3.2 KiB
YAML
85 lines
3.2 KiB
YAML
name: 'Mirror'
|
|
description: 'Test and Mirror AUR Packages'
|
|
|
|
inputs:
|
|
pkgbase:
|
|
description: 'The pkgbase from the AUR.'
|
|
required: false
|
|
ssh_key:
|
|
description: 'The base64-part of the private key to upload to the AUR.'
|
|
required: true
|
|
|
|
runs:
|
|
using: "composite"
|
|
steps:
|
|
|
|
- name: Test AUR package
|
|
uses: docker://docker.io/library/archlinux:base-devel
|
|
with:
|
|
entrypoint: bash
|
|
args: |
|
|
-exuo pipefail -c '
|
|
pacman -Syu --noconfirm git
|
|
|
|
useradd -m user
|
|
echo "user ALL=(ALL:ALL) NOPASSWD: ALL" >/etc/sudoers.d/user
|
|
|
|
sudo -u user -- bash -c "cd ~ && git clone https://aur.archlinux.org/yay.git && cd yay && makepkg -si --noconfirm"
|
|
echo "#!/bin/bash -ex" >/usr/local/bin/yay.sh
|
|
echo "sudo -u user -- yay \"\${@}\"" >>/usr/local/bin/yay.sh
|
|
chmod +x /usr/local/bin/yay.sh
|
|
|
|
chmod 777 .
|
|
sudo -u user PACMAN="/usr/local/bin/yay.sh" makepkg -s --noconfirm
|
|
sudo -u user makepkg --printsrcinfo >.SRCINFO.new
|
|
'
|
|
|
|
- name: Ensure .SRCINFO is up to date
|
|
run: diff -u .SRCINFO .SRCINFO.new
|
|
|
|
- name: Mirror to the AUR
|
|
run: |
|
|
mkdir -p ~/.ssh
|
|
echo "-----BEGIN OPENSSH PRIVATE KEY-----" >~/.ssh/ssh_key
|
|
echo '${{inputs.ssh_key}}' >>~/.ssh/ssh_key
|
|
echo "-----END OPENSSH PRIVATE KEY-----" >>~/.ssh/ssh_key
|
|
echo 'aur.archlinux.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEuBKrPzbawxA/k2g6NcyV5jmqwJ2s+zpgZGZ7tpLIcN' >>~/.ssh/known_hosts
|
|
chmod 700 ~/.ssh
|
|
chmod 600 ~/.ssh/*
|
|
|
|
pkgbase='${{inputs.pkgbase}}'
|
|
[ -n "$pkgbase" ] || pkgbase="$( (. PKGBUILD && printf '%s' "$pkgbase") )"
|
|
[ -n "$pkgbase" ] || pkgbase="$( (. PKGBUILD && printf '%s' "$pkgname") )"
|
|
pkgver="$( (. PKGBUILD && printf '%s' "$pkgver") )"
|
|
pkgrel="$( (. PKGBUILD && printf '%s' "$pkgrel") )"
|
|
|
|
[ -n "$pkgbase" ] || \
|
|
( echo "Failed to determine pkgbase"; exit 1 )
|
|
[ "${{github.ref_name}}" == "main" ] || [ "${{github.ref_name}}" == "master" ] || \
|
|
( echo "Git ref is neither main nor master, aborting"; exit 1 ) || exit 0
|
|
|
|
export GIT_SSH_COMMAND='ssh -i ~/.ssh/ssh_key -o IdentitiesOnly=yes'
|
|
git clone "ssh://aur@aur.archlinux.org/$pkgbase.git" aur
|
|
find aur -maxdepth 1 -type f \
|
|
| while read file
|
|
do
|
|
echo "Removing old file $file ..."
|
|
rm -f "$file"
|
|
done
|
|
git ls-tree --name-only HEAD \
|
|
| while read file
|
|
do
|
|
if [ -f "$file" ]
|
|
then
|
|
echo "Copying new file $file ..."
|
|
cp "$file" aur
|
|
fi
|
|
done
|
|
cd aur
|
|
git add .
|
|
git config user.name "${{github.event.head_commit.committer.name}}"
|
|
git config user.email "${{github.event.head_commit.committer.email}}"
|
|
git commit -m "$(echo -e "$pkgbase $pkgver-$pkgrel\n${{github.event.head_commit.url}}")" \
|
|
--author "${{github.event.head_commit.author.name}} <${{github.event.head_commit.author.email}}>"
|
|
git show HEAD
|
|
echo git push aur "${{github.ref_name}}:master"
|