name: ArtCraft update (manual) on: workflow_dispatch: concurrency: group: raveos-repo-publish cancel-in-progress: false jobs: update: runs-on: iso-builder steps: - name: Checkout PKGBUILDs repo uses: actions/checkout@v4 with: fetch-depth: 0 token: ${{ secrets.FORGEJO_TOKEN }} - name: Install build tools run: | set -euo pipefail sudo pacman -Syu --noconfirm sudo pacman -S --needed --noconfirm base-devel git pacman-contrib rsync curl jq cargo - name: Check latest versions and bump PKGBUILDs id: bump env: GH_TOKEN: ${{ secrets.GH_MIRROR_TOKEN }} run: | set -euo pipefail APPS=(designcraft effectcraft filmcraft lightcraft pdfcraft photocraft vectorcraft) CHANGED=0 HDRFILE=$(mktemp) chmod 600 "$HDRFILE" trap 'rm -f "$HDRFILE"' EXIT AUTH=() if [ -n "${GH_TOKEN:-}" ]; then printf 'Authorization: Bearer %s\n' "$GH_TOKEN" > "$HDRFILE" AUTH=(-H "@${HDRFILE}") fi for app in "${APPS[@]}"; do TAG=$(curl -fsSL --retry 3 "${AUTH[@]}" \ "https://api.github.com/repos/storytold/${app}/releases/latest" \ | jq -r '.tag_name // empty' 2>/dev/null || true) if [ -z "$TAG" ]; then echo "FIGYELEM: ${app}: a legfrissebb verziot nem sikerult lekerdezni -> kihagyva" continue fi if [ "${TAG#v}" = "$TAG" ]; then echo "FIGYELEM: ${app}: nem v-elotagos tag (${TAG}) -> kihagyva" continue fi LATEST="${TAG#v}" CUR=$(grep '^pkgver=' "artcraft-raveos/${app}/PKGBUILD" | cut -d= -f2) if [ "$(vercmp "$LATEST" "$CUR")" -le 0 ]; then echo "${app}: naprakesz (${CUR})" continue fi echo "${app}: ${CUR} -> ${LATEST}" if ! curl -fsSL --retry 3 -o "/tmp/${app}-src.tar.gz" \ "https://github.com/storytold/${app}/archive/refs/tags/${TAG}/${app}-${LATEST}.tar.gz"; then echo "FIGYELEM: ${app}: a forras letoltese sikertelen -> kihagyva" rm -f "/tmp/${app}-src.tar.gz" continue fi SHA=$(sha256sum "/tmp/${app}-src.tar.gz" | cut -d' ' -f1) sed -i "s/^pkgver=.*/pkgver=${LATEST}/" "artcraft-raveos/${app}/PKGBUILD" sed -i "s/^sha256sums=('.*')$/sha256sums=('${SHA}')/" "artcraft-raveos/${app}/PKGBUILD" sed -i "s/^pkgrel=.*/pkgrel=1/" "artcraft-raveos/${app}/PKGBUILD" CHANGED=1 done rm -f /tmp/*-src.tar.gz || true echo "CHANGED=${CHANGED}" >> "$GITHUB_OUTPUT" - name: Commit PKGBUILD bumps if: steps.bump.outputs.CHANGED == '1' run: | set -euo pipefail git config user.name "RaveOS Bot" git config user.email "bot@raveos.hu" git add artcraft-raveos git commit -m "artcraft: frissites a legujabb upstream verziokra" git push origin main - name: Sync core repo from VPS (rsync pull) run: | set -euo pipefail RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=accept-new -o BatchMode=yes" rm -rf /tmp/raveos-core-repo mkdir -p /tmp/raveos-core-repo/x86_64 rsync -az -e "$RSYNC_SSH" \ root@10.66.66.1:/root/docker/repo/repo/x86_64/ /tmp/raveos-core-repo/x86_64/ mkdir -p /tmp/builtpkgs - name: Import GPG signing key env: GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }} run: | set -euo pipefail export GNUPGHOME=/tmp/raveos-gnupg rm -rf "$GNUPGHOME" mkdir -m 700 "$GNUPGHOME" printf '%s' "$GPG_PRIVATE_KEY" | base64 -d | gpg --batch --import - name: Build ArtCraft packages id: build run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" APPS=(designcraft effectcraft filmcraft lightcraft pdfcraft photocraft vectorcraft) FAILED=() for app in "${APPS[@]}"; do cd "artcraft-raveos/${app}" || { FAILED+=("$app"); continue; } PKGVER=$(grep '^pkgver=' PKGBUILD | cut -d= -f2) PKGREL=$(grep '^pkgrel=' PKGBUILD | cut -d= -f2) if ls "$CORE/${app}-${PKGVER}-${PKGREL}-"*.pkg.tar.zst 2>/dev/null | grep -q .; then echo "${app} ${PKGVER}-${PKGREL} unchanged -> skip" cd - >/dev/null continue fi echo "=== Building ${app} ${PKGVER}-${PKGREL} ===" rm -rf src pkg *.pkg.tar.zst || true if ! makepkg -s --noconfirm -f; then echo "HIBA: ${app} build sikertelen" FAILED+=("$app") cd - >/dev/null continue fi if ! cp -v "${app}"-[0-9]*.pkg.tar.zst /tmp/builtpkgs/; then echo "HIBA: ${app} csomag masolasa sikertelen" FAILED+=("$app") fi cd - >/dev/null done echo "failed=${FAILED[*]:-}" >> "$GITHUB_OUTPUT" - name: Sign built packages env: GPG_PASSPHRASE: ${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }} run: | set -euo pipefail export GNUPGHOME=/tmp/raveos-gnupg gpgconf --launch gpg-agent >/dev/null 2>&1 || true BUILT=$(ls /tmp/builtpkgs/*.pkg.tar.zst 2>/dev/null || true) if [ -z "$BUILT" ]; then echo "Nincs csomag alairashoz -> kihagyva" exit 0 fi PASSFILE=$(mktemp) chmod 600 "$PASSFILE" trap 'rm -f "$PASSFILE"' EXIT printf '%s' "$GPG_PASSPHRASE" > "$PASSFILE" for pkg in $BUILT; do gpg --batch --yes --pinentry-mode loopback \ --passphrase-file "$PASSFILE" \ --local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \ --detach-sign "$pkg" echo "Alairva: $(basename "$pkg")" done - name: Publish packages (repo-add + rsync push, only if changed) env: GPG_PASSPHRASE: ${{ secrets.GPG_PRIVATE_KEY_PASSPHRASE }} run: | set -euo pipefail CORE="/tmp/raveos-core-repo/x86_64" BUILT=$(ls /tmp/builtpkgs/*.pkg.tar.zst 2>/dev/null || true) if [ -z "$BUILT" ]; then echo "Nincs uj csomag -> kihagyva" exit 0 fi for pkg in $BUILT; do PKGNAME=$(bsdtar -xOf "$pkg" .PKGINFO | awk -F' = ' '/^pkgname =/{print $2; exit}') if [[ ! "$PKGNAME" =~ ^[a-zA-Z0-9_+-]+$ ]]; then echo "HIBA: Ervenytelen csomagnev: $PKGNAME -> skip" continue fi rm -f "$CORE/${PKGNAME}-"[0-9]*.pkg.tar.zst* 2>/dev/null || true cp -v "$pkg" "$CORE/" [ -f "$pkg.sig" ] && cp -v "$pkg.sig" "$CORE/" done export GNUPGHOME=/tmp/raveos-gnupg cd "$CORE" ALLPKGS=$(ls *.pkg.tar.zst) repo-add raveos-core-repo.db.tar.xz $ALLPKGS PASSFILE=$(mktemp) chmod 600 "$PASSFILE" trap 'rm -f "$PASSFILE"' EXIT printf '%s' "$GPG_PASSPHRASE" > "$PASSFILE" for f in raveos-core-repo.db.tar.xz raveos-core-repo.files.tar.xz; do gpg --batch --yes --pinentry-mode loopback \ --passphrase-file "$PASSFILE" \ --local-user 25C7668F1235F5664F037671BDB2A9CE6EBFF113 \ --detach-sign --no-armor -o "$f.sig" "$f" done ln -sf raveos-core-repo.db.tar.xz.sig raveos-core-repo.db.sig ln -sf raveos-core-repo.files.tar.xz.sig raveos-core-repo.files.sig rm -f raveos-core-repo.db.tar.gz* raveos-core-repo.files.tar.gz* 2>/dev/null || true RSYNC_SSH="ssh -p 2222 -i $HOME/.ssh/vps_backup_key -o StrictHostKeyChecking=accept-new -o BatchMode=yes" rsync -az --delete -e "$RSYNC_SSH" \ "$CORE/" root@10.66.66.1:/root/docker/repo/repo/x86_64/ echo "::notice title=Published packages::ArtCraft csomagok publikálva" - name: Mirror raveos-core-repo to GitHub Releases env: GH_MIRROR_TOKEN: ${{ secrets.GH_MIRROR_TOKEN }} run: | set -euo pipefail bash .forgejo/scripts/mirror-core-repo.sh /tmp/raveos-core-repo - name: Report failed builds if: steps.build.outputs.failed != '' run: | echo "Sikertelen buildek: ${{ steps.build.outputs.failed }}" exit 1 - name: Cleanup if: always() run: | gpgconf --homedir /tmp/raveos-gnupg --kill gpg-agent || true sudo rm -rf /tmp/raveos-gnupg || true sudo rm -rf /tmp/builtpkgs || true sudo rm -rf /tmp/raveos-core-repo || true df -h