From f193010f37dd3511a585dd3e5c9d56b22c60dde2 Mon Sep 17 00:00:00 2001 From: Ivan Date: Wed, 22 Apr 2026 18:16:52 -0500 Subject: [PATCH] feat(flatpak): add script to ensure Flathub remote exists and update build process for Electron Forge --- .github/workflows/build-linux-packages.yml | 5 +++-- forge.config.js | 16 ++++++++++++++++ scripts/ci/github-build-linux-flatpak.sh | 2 ++ scripts/electron-forge-local-tmp.js | 16 ++++++++++++++++ scripts/ensure-flatpak-flathub-remote.sh | 12 ++++++++++++ 5 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 scripts/ensure-flatpak-flathub-remote.sh diff --git a/.github/workflows/build-linux-packages.yml b/.github/workflows/build-linux-packages.yml index edca6a0..cb7afbe 100644 --- a/.github/workflows/build-linux-packages.yml +++ b/.github/workflows/build-linux-packages.yml @@ -21,6 +21,8 @@ on: paths: - "package.json" - "forge.config.js" + - "scripts/electron-forge-local-tmp.js" + - "scripts/ensure-flatpak-flathub-remote.sh" - "scripts/ci/github-build-linux-*.sh" - ".github/workflows/build-linux-packages.yml" - ".github/workflows/frontend-build.yml" @@ -80,8 +82,7 @@ jobs: - name: Install flatpak runtimes (user scope) run: | set -euo pipefail - flatpak --user remote-add --if-not-exists flathub \ - https://flathub.org/repo/flathub.flatpakrepo + bash scripts/ensure-flatpak-flathub-remote.sh flatpak --user install -y --noninteractive flathub \ org.freedesktop.Platform//25.08 \ org.freedesktop.Sdk//25.08 \ diff --git a/forge.config.js b/forge.config.js index 35988de..dc65f22 100644 --- a/forge.config.js +++ b/forge.config.js @@ -84,6 +84,22 @@ module.exports = { config: { options: { categories: ["Network"], + // electron-installer-flatpak still defaults to zypak v2021.02, which hardcodes + // clang++; org.freedesktop.Sdk 25.08 does not ship clang++ on PATH. Match + // org.electronjs.Electron2.BaseApp 25.08 (g++ / C++20). + modules: [ + { + name: "zypak", + sources: [ + { + type: "git", + url: "https://github.com/refi64/zypak", + tag: "v2025.09", + commit: "693a71c5ffa80ec9c9ce2ae03b1ccc493c698e53", + }, + ], + }, + ], runtime: "org.freedesktop.Platform", runtimeVersion: "25.08", sdk: "org.freedesktop.Sdk", diff --git a/scripts/ci/github-build-linux-flatpak.sh b/scripts/ci/github-build-linux-flatpak.sh index 855dc33..f0fecd7 100755 --- a/scripts/ci/github-build-linux-flatpak.sh +++ b/scripts/ci/github-build-linux-flatpak.sh @@ -9,6 +9,8 @@ # - flatpak, flatpak-builder, elfutils (for eu-strip) # - org.freedesktop.Platform/Sdk//25.08 # - org.electronjs.Electron2.BaseApp//25.08 +# ``electron-forge-local-tmp.js`` registers the Flathub user remote before Forge so +# ``@malept/flatpak-bundler`` can auto-install those refs when missing. set -euo pipefail ROOT="$(cd "$(dirname "$0")/../.." && pwd)" diff --git a/scripts/electron-forge-local-tmp.js b/scripts/electron-forge-local-tmp.js index c375c27..df0db6e 100644 --- a/scripts/electron-forge-local-tmp.js +++ b/scripts/electron-forge-local-tmp.js @@ -20,6 +20,22 @@ const env = { const forgeCli = require.resolve("@electron-forge/cli/dist/electron-forge.js"); const args = process.argv.slice(2); + +const flatpakForgeTarget = + args.includes("@electron-forge/maker-flatpak") || + process.env.FORGE_MAKE_FLATPAK === "1" || + process.env.FORGE_MAKE_FLATPAK === "true"; +if (flatpakForgeTarget) { + const ensure = path.join(root, "scripts", "ensure-flatpak-flathub-remote.sh"); + const pre = spawnSync("bash", [ensure], { cwd: root, stdio: "inherit" }); + if (pre.status !== 0 && pre.status !== null) { + process.exit(pre.status); + } + if (pre.signal) { + process.exit(1); + } +} + const result = spawnSync(process.execPath, [forgeCli, ...args], { cwd: root, env, diff --git a/scripts/ensure-flatpak-flathub-remote.sh b/scripts/ensure-flatpak-flathub-remote.sh new file mode 100644 index 0000000..23a10d9 --- /dev/null +++ b/scripts/ensure-flatpak-flathub-remote.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# flatpak-bundler installs runtimes with flatpak --user and a bare ref; that only works +# once the Flathub remote exists (see @malept/flatpak-bundler ensureRef). +set -euo pipefail + +if ! command -v flatpak >/dev/null 2>&1; then + echo "flatpak is not installed." >&2 + exit 1 +fi + +flatpak --user remote-add --if-not-exists flathub \ + https://flathub.org/repo/flathub.flatpakrepo