From b731d3fb18b25490f0a703349e53e2a1ac6bf66b Mon Sep 17 00:00:00 2001 From: deepend Date: Mon, 23 Feb 2026 09:35:36 -0700 Subject: [PATCH 1/9] Added a Manjaro/Arch-style PKGBUILD for a VCS package (zoitechat-git) under packaging/manjaro/PKGBUILD, including package metadata, runtime/build deps, pkgver() generation from git history, and build()/package() functions using Meson (arch-meson, meson compile, meson install). Added a new GitHub Actions workflow .github/workflows/manjaro-package-build.yml that: runs in a manjarolinux/base container, installs Manjaro packaging/build tooling, builds via makepkg as a non-root user, generates .SRCINFO, runs namcap checks on both PKGBUILD and the built package, uploads package artifacts plus PKGBUILD/.SRCINFO. --- .github/workflows/manjaro-package-build.yml | 79 +++++++++++++++++++++ packaging/manjaro/PKGBUILD | 64 +++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 .github/workflows/manjaro-package-build.yml create mode 100644 packaging/manjaro/PKGBUILD diff --git a/.github/workflows/manjaro-package-build.yml b/.github/workflows/manjaro-package-build.yml new file mode 100644 index 00000000..73eb3394 --- /dev/null +++ b/.github/workflows/manjaro-package-build.yml @@ -0,0 +1,79 @@ +name: Manjaro Package Build + +on: + push: + branches: [master, main] + pull_request: + branches: [master, main] + workflow_dispatch: + +permissions: + contents: read + +jobs: + manjaro-package: + runs-on: ubuntu-latest + container: + image: manjarolinux/base:latest + + steps: + - name: Install packaging toolchain + run: | + set -euxo pipefail + pacman -Syu --noconfirm + pacman -S --noconfirm --needed \ + base-devel \ + git \ + namcap \ + meson \ + ninja \ + pkgconf \ + glib2 \ + gtk3 \ + openssl \ + dbus-glib \ + libcanberra \ + libayatana-appindicator \ + iso-codes \ + lua \ + perl \ + python \ + python-cffi \ + pciutils + + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: true + + - name: Build package and generate .SRCINFO (non-root) + run: | + set -euxo pipefail + useradd -m builder + chown -R builder:builder "$GITHUB_WORKSPACE" + su builder -c "cd '$GITHUB_WORKSPACE/packaging/manjaro' && makepkg --noconfirm --syncdeps --cleanbuild" + su builder -c "cd '$GITHUB_WORKSPACE/packaging/manjaro' && makepkg --printsrcinfo > .SRCINFO" + + - name: Lint PKGBUILD and package with namcap + run: | + set -euxo pipefail + cd "$GITHUB_WORKSPACE/packaging/manjaro" + namcap PKGBUILD + pkg_file="$(find . -maxdepth 1 -type f -name '*.pkg.tar.*' | head -n1)" + namcap "$pkg_file" + + - name: Collect artifacts + run: | + set -euxo pipefail + mkdir -p artifacts + cp -v "$GITHUB_WORKSPACE"/packaging/manjaro/*.pkg.tar.* artifacts/ + cp -v "$GITHUB_WORKSPACE"/packaging/manjaro/PKGBUILD artifacts/ + cp -v "$GITHUB_WORKSPACE"/packaging/manjaro/.SRCINFO artifacts/ + + - name: Upload package artifacts + uses: actions/upload-artifact@v4 + with: + name: zoitechat-manjaro-package + path: artifacts/* + if-no-files-found: error diff --git a/packaging/manjaro/PKGBUILD b/packaging/manjaro/PKGBUILD new file mode 100644 index 00000000..c594d204 --- /dev/null +++ b/packaging/manjaro/PKGBUILD @@ -0,0 +1,64 @@ +# Maintainer: ZoiteChat Maintainers + +pkgname=zoitechat-git +pkgver=0 +pkgrel=1 +pkgdesc='IRC client for GNOME (ZoiteChat development snapshot)' +arch=('x86_64') +url='https://github.com/zoitechat/zoitechat' +license=('GPL-2.0-or-later') +depends=( + 'dbus-glib' + 'glib2' + 'gtk3' + 'iso-codes' + 'libcanberra' + 'lua' + 'openssl' + 'perl' + 'python-cffi' +) +makedepends=( + 'git' + 'meson' + 'ninja' + 'pkgconf' + 'python' +) +optdepends=( + 'libayatana-appindicator: Ayatana/AppIndicator tray backend' + 'pciutils: sysinfo plugin hardware detection details' +) +provides=('zoitechat') +conflicts=('zoitechat') + +_repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +source=("zoitechat::git+file://${_repo_root}") +sha256sums=('SKIP') + +pkgver() { + cd "$srcdir/zoitechat" + + if git describe --long --tags --abbrev=7 >/dev/null 2>&1; then + git describe --long --tags --abbrev=7 \ + | sed 's/^v//' \ + | sed 's/-/.r/;s/-/./' + else + printf '0.r%s.%s\n' \ + "$(git rev-list --count HEAD)" \ + "$(git rev-parse --short=7 HEAD)" + fi +} + +build() { + arch-meson zoitechat build \ + -Dbuildtype=plain \ + -Dtext-frontend=false \ + -Dinstall-plugin-metainfo=true + + meson compile -C build +} + +package() { + meson install -C build --destdir "$pkgdir" +} From 498497171b2398fb2d317f1dfbb66faaeb62134e Mon Sep 17 00:00:00 2001 From: deepend Date: Mon, 23 Feb 2026 09:40:27 -0700 Subject: [PATCH 2/9] Updated the Manjaro package workflow to make builder user creation idempotent by guarding useradd with an existence check (id -u builder ... || useradd -m builder), preventing failures when the user already exists in the container. --- .github/workflows/manjaro-package-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/manjaro-package-build.yml b/.github/workflows/manjaro-package-build.yml index 73eb3394..b639f3d3 100644 --- a/.github/workflows/manjaro-package-build.yml +++ b/.github/workflows/manjaro-package-build.yml @@ -50,7 +50,7 @@ jobs: - name: Build package and generate .SRCINFO (non-root) run: | set -euxo pipefail - useradd -m builder + id -u builder >/dev/null 2>&1 || useradd -m builder chown -R builder:builder "$GITHUB_WORKSPACE" su builder -c "cd '$GITHUB_WORKSPACE/packaging/manjaro' && makepkg --noconfirm --syncdeps --cleanbuild" su builder -c "cd '$GITHUB_WORKSPACE/packaging/manjaro' && makepkg --printsrcinfo > .SRCINFO" From 66d054993882e706625e3aafafa6289538d056a3 Mon Sep 17 00:00:00 2001 From: deepend Date: Mon, 23 Feb 2026 09:54:11 -0700 Subject: [PATCH 3/9] Fixed Manjaro pkgver() generation to produce Arch-valid version strings when git describe includes pre-release hyphens (for example -pre1) by normalizing the describe suffix and replacing remaining hyphens with dots. This prevents invalid pkgver values like ...pre1-40-g.... --- packaging/manjaro/PKGBUILD | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packaging/manjaro/PKGBUILD b/packaging/manjaro/PKGBUILD index c594d204..85fa6f39 100644 --- a/packaging/manjaro/PKGBUILD +++ b/packaging/manjaro/PKGBUILD @@ -42,7 +42,8 @@ pkgver() { if git describe --long --tags --abbrev=7 >/dev/null 2>&1; then git describe --long --tags --abbrev=7 \ | sed 's/^v//' \ - | sed 's/-/.r/;s/-/./' + | sed -E 's/([^-]+)-([0-9]+)-g/\1.r\2.g/' \ + | sed 's/-/./g' else printf '0.r%s.%s\n' \ "$(git rev-list --count HEAD)" \ From b2fd66e4c427475e8ac7687dc96c0168b8361575 Mon Sep 17 00:00:00 2001 From: deepend Date: Mon, 23 Feb 2026 10:31:39 -0700 Subject: [PATCH 4/9] Fixed the Manjaro packaging build failure by removing the redundant -Dbuildtype=plain from arch-meson invocation in build(), so Meson no longer receives buildtype from both --buildtype and -Dbuildtype. --- packaging/manjaro/PKGBUILD | 1 - 1 file changed, 1 deletion(-) diff --git a/packaging/manjaro/PKGBUILD b/packaging/manjaro/PKGBUILD index 85fa6f39..43720a45 100644 --- a/packaging/manjaro/PKGBUILD +++ b/packaging/manjaro/PKGBUILD @@ -53,7 +53,6 @@ pkgver() { build() { arch-meson zoitechat build \ - -Dbuildtype=plain \ -Dtext-frontend=false \ -Dinstall-plugin-metainfo=true From ab0e84257a65bc219b361bf23fb077238a61784a Mon Sep 17 00:00:00 2001 From: deepend Date: Mon, 23 Feb 2026 10:50:53 -0700 Subject: [PATCH 5/9] Replaced gnome.genmarshal() usage with explicit Meson custom_target() rules that generate both marshal.h and marshal.c from marshalers.list, preserving the same marshaller prefix and generated outputs consumed by the build. Added a direct find_program() lookup for glib-genmarshal (with glib-genmarshal-2.0 fallback), so configuration no longer depends on the broken glib-2.0 pkg-config tool variable (glib_genmarshal) reported in your error. --- src/common/meson.build | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/common/meson.build b/src/common/meson.build index f5556fe4..0d651787 100644 --- a/src/common/meson.build +++ b/src/common/meson.build @@ -55,12 +55,39 @@ if host_machine.system() == 'windows' common_includes += include_directories('sysinfo') endif -marshal = gnome.genmarshal('marshal', - sources: 'marshalers.list', - prefix: '_zoitechat_marshal', - internal: true +glib_genmarshal = find_program( + 'glib-genmarshal', + 'glib-genmarshal-2.0', + required: true, ) +marshal = [ + custom_target('marshal_h', + input: 'marshalers.list', + output: 'marshal.h', + command: [ + glib_genmarshal, + '--prefix=_zoitechat_marshal', + '--header', + '@INPUT@', + '--output', + '@OUTPUT@', + ] + ), + custom_target('marshal_c', + input: 'marshalers.list', + output: 'marshal.c', + command: [ + glib_genmarshal, + '--prefix=_zoitechat_marshal', + '--body', + '@INPUT@', + '--output', + '@OUTPUT@', + ] + ) +] + make_te = find_program('make-te.py') textevents = custom_target('textevents', From 155a20115cee7ea15fcc5209b8ffb4df3f254d81 Mon Sep 17 00:00:00 2001 From: deepend-tildeclub <58404188+deepend-tildeclub@users.noreply.github.com> Date: Mon, 23 Feb 2026 11:03:25 -0700 Subject: [PATCH 6/9] Add glib2-devel to Manjaro package build dependencies --- .github/workflows/manjaro-package-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/manjaro-package-build.yml b/.github/workflows/manjaro-package-build.yml index b639f3d3..cb262330 100644 --- a/.github/workflows/manjaro-package-build.yml +++ b/.github/workflows/manjaro-package-build.yml @@ -29,6 +29,7 @@ jobs: ninja \ pkgconf \ glib2 \ + glib2-devel \ gtk3 \ openssl \ dbus-glib \ From 5204a6b67208383bcf75f4d17d78ffd786d72f8c Mon Sep 17 00:00:00 2001 From: deepend-tildeclub <58404188+deepend-tildeclub@users.noreply.github.com> Date: Mon, 23 Feb 2026 11:07:49 -0700 Subject: [PATCH 7/9] Add luajit-devel to package dependencies --- .github/workflows/manjaro-package-build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/manjaro-package-build.yml b/.github/workflows/manjaro-package-build.yml index cb262330..f0ad50d2 100644 --- a/.github/workflows/manjaro-package-build.yml +++ b/.github/workflows/manjaro-package-build.yml @@ -35,6 +35,7 @@ jobs: dbus-glib \ libcanberra \ libayatana-appindicator \ + luajit-devel \ iso-codes \ lua \ perl \ From 2598f3732cf2333539e66b8d1a54d748960730fe Mon Sep 17 00:00:00 2001 From: deepend-tildeclub <58404188+deepend-tildeclub@users.noreply.github.com> Date: Mon, 23 Feb 2026 11:22:42 -0700 Subject: [PATCH 8/9] Change luajit-devel to luajit in workflow --- .github/workflows/manjaro-package-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/manjaro-package-build.yml b/.github/workflows/manjaro-package-build.yml index f0ad50d2..1e73801d 100644 --- a/.github/workflows/manjaro-package-build.yml +++ b/.github/workflows/manjaro-package-build.yml @@ -35,7 +35,7 @@ jobs: dbus-glib \ libcanberra \ libayatana-appindicator \ - luajit-devel \ + luajit \ iso-codes \ lua \ perl \ From 42993c8c9b10ed81b0c427229f751fdbfe08c4f7 Mon Sep 17 00:00:00 2001 From: deepend Date: Mon, 23 Feb 2026 11:50:54 -0700 Subject: [PATCH 9/9] =?UTF-8?q?Updated=20the=20Manjaro=20PKGBUILD=20build?= =?UTF-8?q?=20configuration=20to=20explicitly=20enable=20all=20bundled,=20?= =?UTF-8?q?Linux-applicable=20ZoiteChat=20plugins=20during=20Meson=20setup?= =?UTF-8?q?:=20checksum,=20fishlim,=20lua,=20perl,=20python,=20and=20sysin?= =?UTF-8?q?fo.=20This=20ensures=20the=20package=20build=20doesn=E2=80=99t?= =?UTF-8?q?=20rely=20on=20implicit=20defaults=20for=20plugin=20inclusion.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packaging/manjaro/PKGBUILD | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packaging/manjaro/PKGBUILD b/packaging/manjaro/PKGBUILD index 43720a45..c6d43ceb 100644 --- a/packaging/manjaro/PKGBUILD +++ b/packaging/manjaro/PKGBUILD @@ -54,6 +54,12 @@ pkgver() { build() { arch-meson zoitechat build \ -Dtext-frontend=false \ + -Dwith-checksum=true \ + -Dwith-fishlim=true \ + -Dwith-lua=lua \ + -Dwith-perl=perl \ + -Dwith-python=python3 \ + -Dwith-sysinfo=true \ -Dinstall-plugin-metainfo=true meson compile -C build